簡體   English   中英

Java MD5 散列函數給出不正確的散列

[英]Java MD5 hashing function giving incorrect hash

我遇到了 Java md5 散列函數沒有返回正確值的問題。 對於大多數值,它確實返回正確的值,但是我發現了一個輸入不正確的示例。

我的代碼是:

public String hash(String pass) throws Exception
{
    encr = MessageDigest.getInstance("MD5");
    return new BigInteger(1, encr.digest(pass.getBytes())).toString(16);
}

這將返回我嘗試過的大多數示例的正確答案,例如 hash("beep") -> "1284e53a168a5ad955485a7c83b10de0", hash("hello") -> "5d41402abc4b2a76b9719d911017c59

然后是問題:hash("dog") -> "6d80eb0c50b49a509b49f2424e8c805" 而不是我從幾個在線 md5 生成器獲得的 "06d80eb0c50b49a509b49f2424e8c805"。

我非常感謝任何人都可以對此有所了解,謝謝。

默認情況下,它不包含前導零,但您可以輕松地自己填充這些:

String md5 = new BigInteger(1, encr.digest(pass.getBytes())).toString(16);
return String.format("%32s", md5).replace(' ', '0');
// this code will resolve hashcode issue 
// I hope this helps everyone.

 private static String makeHash(String key_to_hash) {
            try {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.reset();
                md.update(key_to_hash.getBytes(Charset.forName("UTF-8")));
                return bytesToHex(md.digest());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return null;
        }



private static String bytesToHex(byte[] b) {
                char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                        'a', 'b', 'c', 'd', 'e', 'f','A', 'B', 'C', 'D', 'E', 'F' };
                StringBuffer buf = new StringBuffer();
                for (int j = 0; j < b.length; j++) {
                    buf.append(hexDigit[(b[j] >> 4) & 0x0f]);
                    buf.append(hexDigit[b[j] & 0x0f]);
                }
                return buf.toString();
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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