6

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

我会使用 StandardPasswordEncoder Spring security 3.1.4 来加密我的密码并插入到数据库中。但是我如何回收该方法产生的盐呢?

这是文档 Spring 安全性的示例:

StandardPasswordEncoder encoder = new StandardPasswordEncoder("secret");
String result = encoder.encode("myPassword");
assertTrue(encoder.matches("myPassword", result));

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

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

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

4

2 回答 2

7

我想你是在问它是如何工作的?答案相当简单。StandardPasswordEncoder.matches()是您要使用的方法。在幕后,StandardPasswordEncoder将解码散列密码并从生成的字节数组中提取盐。然后它将使用该盐对您传入的纯文本密码进行哈希处理。如果生成的哈希与原始哈希匹配,则您的密码匹配!后面的细节参考源码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));
}
于 2013-10-20T23:07:14.127 回答
2

您不能将保存的密码破坏为人类可读的。

假设myPassword ="9e7e3a73a40871d4b489adb746c31ace280d28206dded9665bac40eabfe6ffdc32a8c5c416b5878f"pesent 在数据库中。

你可以这样做

StandardPasswordEncoder encoder = new StandardPasswordEncoder("secret");
String result = encoder.encode("myPassword");

now your result is equal to `9e7e3a73a40871d4b489adb746c31ace280d28206dded9665bac40eabfe6ffdc32a8c5c416b5878f` 

String passworddb = getPasswordFromDB();

passworddb from daabase is `9e7e3a73a40871d4b489adb746c31ace280d28206dded9665bac40eabfe6ffdc32a8c5c416b5878f`

assertTrue(encoder.matches(passworddb, result)); then passworddb and result are equal.
于 2013-10-20T15:25:43.710 回答