我在春季安全中编写了一个哈希码隐藏方法。在这种方法中,我将在数据库中保存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