簡體   English   中英

MD5編碼結果不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM