我在春季安全中編寫了一個哈希碼隱藏方法。在這種方法中,我將在數據庫中保存salt值和迭代大小。當用戶使用純密碼登錄時,下次我將使用鹽值和從數據庫迭代並消化密碼。但是,即使鹽和迭代值相同,此方法也會生成不同的哈希碼。爲什麼Digester爲同樣的消息,代碼和迭代生成不同的哈希碼
public Administrator encryptDigestCode(Administrator administrator) {
StandardStringDigester digester = new StandardStringDigester();
Administrator admin = new Administrator();
digester.setAlgorithm("SHA-256");
digester.setStringOutputType("base64");
Random ran = new Random();
int iterate = ran.nextInt(1000);
digester.setIterations(iterate);
RandomSaltGenerator ram = new RandomSaltGenerator();
byte[] salt = ram.generateSalt(10);
String pass = new String(salt) + administrator.getHashedPassword();
String encryptedPassword = digester.digest(pass);
if (digester.matches(administrator.getHashedPassword(),
encryptedPassword)) {
admin.setLoginDetail(new LoginDetail());
admin.getLoginDetail().setSalt(new String(ram.generateSalt(10)));
admin.getLoginDetail().setHashingCycle(iterate);
admin.setUserName(administrator.getUsername());
admin.setSesamiagreementno(administrator.getSesamiagreementno());
admin.setHashedPassword(encryptedPassword);
} else {
admin.setLoginDetail(null);
admin.setHashedPassword(null);
admin.setUserName(null);
}
return admin;
}
我應該怎麼做?任何代碼或網站以供參考。謝謝
您將不得不張貼真實的代碼,而不是每次調用時都會生成一個新的隨機鹽的代碼。 – 2012-01-05 23:31:26
OK,-1不指定鹽的存儲方式。 – 2012-01-09 20:53:29