2014-03-30 28 views
1

我一直在嘗試做一些密碼驗證模塊,我陷入了驗證過程。我通過安全隨機創建Salt字節。並將其存儲在BINARY格式的數據庫中。安全隨機在登錄過程中

random = SecureRandom.getInstance("SHA1PRNG"); 
random.nextBytes(salt); 

我散列使用

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 
PBEKeySpec pbeKeySpec = new PBEKeySpec(charData,salt,iterations,bitLength); 
hash = factory.generateSecret(pbeKeySpec).getEncoded(); 

了密碼當我試圖(使用從DB中的鹽即值生成散列)來驗證密碼。我沒有得到相同的散列值。有什麼我做錯了。

+0

首先驗證您生成的'salt'中的字節與您從數據庫檢索到的字節相同。 – chrylis

回答

0

這裏的問題是存儲數據BINARY格式。它將採用實際數據並在末尾附加0的以填充剩餘的字節。因此,如果您不知道二進制數據的實際大小,請使用BLOB數據類型,它將只存儲實際數據。