如何使用Spring StandardPasswordEncode并获取Salt生成?

Max*_*meF 6 java postgresql spring spring-security password-encryption

如何加密密码将其插入数据库并在比较后何时连接?

我会使用StandardPasswordEncoder Spring security 3.1.4来加密我的密码并插入到db中.但是如何恢复该方法生成的盐?

这是doc Spring安全性的一个例子:

StandardPasswordEncoder encoder = new StandardPasswordEncoder("secret");
String result = encoder.encode("myPassword");
assertTrue(encoder.matches("myPassword", result));
Run Code Online (Sandbox Code Playgroud)

我问她,因为我需要重新编码密码进行比较?并验证用户是否必须输入正确的密码?

这里密码编码: 9e7e3a73a40871d4b489adb746c31ace280d28206dded9665bac40eabfe6ffdc32a8c5c416b5878f 我会比较编码新密码

Link Doc Spring:http://docs.spring.io/spring-security/site/docs/3.1.4.RELEASE/reference/crypto.html Link API SPring security 3.1.4:http://docs.spring.io /spring-security/site/docs/3.1.4.RELEASE/apidocs/

Mat*_*ter 7

我想你问它是如何工作的?答案很简单.StandardPasswordEncoder.matches()是您要使用的方法.在幕后,StandardPasswordEncoder将解码散列密码并从生成的字节数组中提取salt.然后它将使用该哈希值来传入您传入的纯文本密码.如果生成的哈希值与原始哈希值匹配,则您的密码匹配!有关详细信息,请参阅来源StandardPasswordEncoder.matches():

public boolean matches(CharSequence rawPassword, String encodedPassword) {
    byte[] digested = decode(encodedPassword);
    byte[] salt = subArray(digested, 0, saltGenerator.getKeyLength());
    return matches(digested, digest(rawPassword, salt));
}
Run Code Online (Sandbox Code Playgroud)