亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的 Spring Security 項目中的 BCrypt (Spring security)

我的 Spring Security 項目中的 BCrypt (Spring security)

白板的微信 2023-06-08 17:43:33
我該如何加密。這樣在數據庫中它就不會顯示用戶密碼。我現在保存在數據庫中 - 登錄名和密碼,用戶角色。我需要密碼必須在數據庫中加密(BCrypt)@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.authorizeRequests()                .antMatchers("/admin/**").hasRole("ADMIN")                .antMatchers("/user/**").hasRole("USER")                .antMatchers("/**").permitAll()                .and()                .formLogin()                .loginPage("/login")                .defaultSuccessUrl("/allStudents")                .and()                .logout()                .and()                .csrf().disable();    }    @Bean    public PasswordEncoder weDoNotWantEncryption() {        return new PasswordEncoder() {            @Override            public String encode(CharSequence rawPassword) {                return rawPassword.toString();            }            @Override            public boolean matches(CharSequence rawPassword, String encodedPassword) {                return rawPassword.toString().equals(encodedPassword);            }        };    }}
查看完整描述

2 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

非常簡單 - 只需將您的weDoNotWantEncryption()函數替換為返回 BCrypt 實例的函數:

@Bean
public PasswordEncoder passwordEncoder() { 
   return new BCryptPasswordEncoder();
}

BCryptPasswordEncoder實現PasswordEncoder(顧名思義),因此已經為encode()和定義了好的方法matches()。

請注意,這將(當然)使當前在您的數據庫中的任何密碼都無法使用,盡管鑒于這些密碼以明文形式存儲,我假設(并希望/祈禱)這是在測試環境中,而不是在生產環境中。


查看完整回答
反對 回復 2023-06-08
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

當我們加密存儲密碼時,我們通常對它們進行哈希處理,以便它是一種單向加密,即即使我們知道哈希算法,我們也無法從加密的密碼中檢索到原始密碼。

我們遵循的主要程序如下。

  • 取字符串“密碼”

  • 向密碼添加鹽(一個隨機字符串,以確保具有相同密碼的多個用戶沒有相同的散列密碼):隨機鹽:“A3fcherf42”,生成的字符串:“A3fcherf42password”

  • 使用加密算法散列此字符串,您可能會得到:“d143d1w132dd23dsgrg5”

  • 將鹽附加到加密密碼以供將來驗證用戶登錄時使用:“A3fcherf42d143d1w132dd23dsgrg5”

  • 用用戶id保存在數據庫中

現在驗證用戶登錄:

  • 從登錄表單中獲取密碼,即“密碼”

  • 讀取存儲在數據庫中的哈希值:“A3fcherf42d143d1w132dd23dsgrg5”

  • 從存儲的散列密碼中提取鹽:“A3fcherf42”

  • 將鹽附加到用戶輸入的密碼:“A3fcherf42password”

  • 哈希密碼,現在生成的哈希值應該與存儲在數據庫中的哈希值匹配。

使用 Bcrypt 執行此操作是一個簡單的過程,因為大部分工作都由庫處理。我解釋了上面的場景,以便您對幕后發生的事情有一個很好的理解。您執行以下操作以生成并保存散列密碼。

String?pw_hash?=?BCrypt.hashpw(plain_password,?BCrypt.gensalt());

現在您有了散列字符串,將其存儲到數據庫中。

當用戶登錄時,您獲取他輸入的密碼、數據庫存儲的哈希字符串,并對其進行驗證。

if?(BCrypt.checkpw(entered_pw,?stored_hash))
????return?True;


查看完整回答
反對 回復 2023-06-08
  • 2 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號