2

我正在使用 Spring 安全 3.1.1.RELEASE。我正在使用 StandardPasswordEncoder.encode(password) 函数来加密我的用户密码,这依赖于生成的随机盐。从 Spring 安全源,最终从“org.springframework.security.crypto.keygen.SecureRandomBytesKeyGenerator”调用这个方法来生成盐......</p>

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

我的问题是,当从登录页面输入密码时,如何生成用于编码密码比较的相同盐?上面的内容似乎是随​​机的,所以我想在比较完成后会创建一个新的随机盐。

4

2 回答 2

2

salt与哈希密码一起保存在数据库中,当用户再次登录时,从数据库中提取salt,与密码进行哈希,并与数据库中的密码哈希进行比较。如果它们匹配,则密码正确。

盐值只会使具有相同密码的人不会在数据库中脱颖而出,因为盐键会更改哈希值。这也使得暴力破解哈希变得更加困难,因为密钥也会使密码更长。如果通过蛮力找到散列密码,则仍必须从该散列中删除密钥才能知道真正的密码,从而更难从散列中对密码进行逆向工程。

于 2012-12-11T12:45:44.940 回答
1

否。如果您为加盐哈希密码配置了 Spring Security,那么在比较时,就会调用用户数据查找。一旦通过用户名找到用户记录,然后从密码字段中提取盐,并用于从页面计算密码的哈希值。然后比较哈希值。

于 2012-12-11T12:32:42.320 回答