[英]MD5 encoding with different results
我遇到了MD5
編碼這個奇怪的問題。 實際上,在每個人都告訴我不要使用MD5之前:這是一個舊系統,算法已經被選擇。
無論如何-我有一個存儲了MD5
哈希密碼的MySQL
表。 在同一表中,還存儲了鹽。
我有一個測試用戶,其密碼為"test"
,鹽為"salt"
。 使用MySQL的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;
}
此方法輸出完全相同的md5哈希值。
然后,我在此系統的Spring安全性部分中配置了Md5PasswordEncoder,並遇到了問題,因為它不允許我登錄。通過擴展Md5PasswordEncoder
類並使用某些日志記錄覆蓋encodePassword()方法,我能夠確定它給定相同的密碼("test")
和salt ("salt")
時,輸出不同的md5哈希值:“ 150671e7a5fb8ace58aaa012de7f9b5c”。
誰能解釋這個問題,或者給我一些暗示可能是什么原因?
根據Github上的一些消息來源,Spring通過這種方式合並密碼和鹽:
return password + "{" + salt.toString() + "}";
見方法mergePasswordAndSalt(..)在BasePasswordEncoder.java
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.