2012-12-10 81 views
2

我正在使用Spring安全性3.1.1.RELEASE。我使用StandardPasswordEncoder.encode(password)函數來加密我的用戶密碼,這依賴於正在生成的隨機鹽。從春天的安全來源,最終這種方法會從「o​​rg.springframework.security.crypto.keygen.SecureRandomBytesKeyGenerator」爲鹽代叫...在Spring Security中,密碼比較期間如何正確生成隨機鹽?

public byte[] generateKey() { 
    byte[] bytes = new byte[keyLength]; 
    random.nextBytes(bytes); 
    return bytes; 
} 

我的問題是,當從登錄頁面輸入的密碼,如何生成用於編碼口令比較的鹽?看起來上面是隨機的,所以我會在比較完成後創建一個新的隨機鹽。

回答

1

不可以。如果您將Spring Security配置爲醃製散列密碼,則在進行比較時會出現用戶數據查找調用。一旦通過用戶名找到了用戶記錄,那麼salt將從密碼字段中提取出來,並用於計算來自頁面的密碼的哈希值。然後哈希得到比較。

1

當用戶再次登錄時,鹽會從數據庫中提取,用密碼進行散列並與數據庫中的密碼哈希進行比較,鹽會與數據庫一起保存在數據庫中, 。如果它們匹配,則密碼是正確的。

鹽值只是使具有相同密碼的人不會在數據庫中脫穎而出,因爲salt鍵會更改散列。由於密鑰也使得密碼更長,所以它也使得強制哈希更難。如果通過暴力破解找到散列密碼,則密鑰仍然必須從該散列中除去,以便知道真實密碼,使得難以從散列中反向設計密碼。