Mat*_*son -1 java security spring md5
我遇到了MD5编码这个奇怪的问题.实际上,在每个人都跳进来告诉我不要使用MD5之前:它是一个遗留系统,并且已经选择了算法.
无论如何 - 我有一个存储MySQL了MD5哈希密码的表.在同一张表中,盐也被储存.
我有一个测试用户,密码是"test",盐是"salt".使用MySQLs MD5函数(select md5('testsalt')),我发现了哈希"315240c61218a4a861ec949166a85ef0".我还通过外部PHP系统的管理员验证了这一预期结果,该系统将用户信息发送到我们的系统.
在系统的一个模块中,我们MD5使用以下代码计算哈希值:
public static String md5EncryptString(String string, String salt) {
MessageDigest messageDigest;
String encryptString = string + salt;
String result;
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(encryptString.getBytes(Charset.forName("UTF8")));
final byte[] resultByte = messageDigest.digest();
result = new String(Hex.encodeHex(resultByte));
return result;
} catch (NoSuchAlgorithmException e) {
logger.error("NoSuchAlgorithmException in encryptString");
result = encryptString;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
此方法输出完全相同的md5哈希值.
然后我在这个系统的Spring安全部分配置了一个Md5PasswordEncoder并遇到问题,因为它不会让我登录.通过扩展Md5PasswordEncoder类并使用一些日志记录覆盖encodePassword()方法,我能够确定它输出一个不同的md5哈希:"150671e7a5fb8ace58aaa012de7f9b5c"给出相同的密码("test")和盐("salt").
任何人都可以解释这个或给我一些暗示可能导致这种情况的原因吗?
根据Github上的一些消息来源,Spring以这种方式合并密码和salt:
return password + "{" + salt.toString() + "}";
Run Code Online (Sandbox Code Playgroud)
参见方法mergePasswordAndSalt(..)BasePasswordEncoder.java
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |