我正在使用Spring security 3.1.1.RELEASE。我正在使用StandardPasswordEncoder.encode(密码)函数来加密我的用户密码,这依赖于生成的随机盐。从Spring安全源,最终这个方法从“org.springframework.security.crypto.keygen.SecureRandomBytesKeyGenerator”调用,用于生成盐...
public byte[] generateKey() {
byte[] bytes = new byte[keyLength];
random.nextBytes(bytes);
return bytes;
}
我的问题是,当从登录页面输入密码时,如何生成用于编码密码比较的相同盐?看起来上面是随机的,所以我想在比较完成后会创建一个新的随机盐。
答案 0 :(得分:1)
没有。如果您将Spring Security配置为盐渍散列密码,那么在比较时,会调用用户数据查找。一旦用户名找到用户记录,则从密码字段中提取salt,并用于从页面计算密码的哈希值。然后哈希得到比较。
答案 1 :(得分:1)
salt与散列密码一起保存在数据库中, 当用户再次登录时,从数据库中提取salt,使用密码进行哈希处理,并与数据库中的密码哈希进行比较。如果匹配,则密码正确。
Salt值只会使具有相同密码的人在数据库中不突出,因为salt键会更改哈希值。它还使得强制哈希变得更加困难,因为密钥也使密码更长。如果通过暴力破解找到散列密码,则仍必须从该散列中删除密钥才能知道真实密码,从而更难从散列中对密码进行反向工程。