簡體   English   中英

如何將MD5哈希變為字符串?

[英]How to turn a MD5 Hash to a String?

我想將MD5哈希變成一個字符串:

public String MD5ToString(String plain) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.reset();
        md.update(plain.getBytes());
        byte[] digest = md.digest();
        BigInteger bigInt = new BigInteger(1,digest);
        String hashtext = bigInt.toString(16);
        // Now we need to zero pad it if you actually want the full 32 chars.
        while(hashtext.length() < 32 ){
            hashtext = "0"+hashtext;
        }
        return plain;
    } catch (Exception e) {
        System.out.println("Cannot encrypt String to Hash");
        e.printStackTrace();
    }
    return null;
}

但是我剛剛拿回Md5? 什么是ms錯誤?

更新:

我將返回類型更改為hashtext,但是當我想將哈希轉換為字符串時我只是得到另一個返回:

String: test
Hash: 098f6bcd4621d373cade4e832627b4f6
String: fb469d7ef430b0baf0cab6c436e70375

我沒有仔細分析代碼但是你返回沒有改變的對象plain 如果要從方法返回MD5字符串,則應返回hashText對象。

要擁有一個可以輕松發送或存儲的可用字符串,通常的解決方案是將其編碼為base64(比hexa短約33%)。

以下是您可以在Google上找到的眾多教程之一: http//www.javatips.net/blog/2011/08/how-to-encode-and-decode-in-base64-using-java

在您的確切情況下,因為您似乎想要hexa表示,也許您只是想要改變

return plain;

return hashtext;

我將返回類型更改為hashtext,但是當我想將哈希值轉換為字符串時,我只是得到另一個哈希值。

你似乎對哈希是什么感到誤解。

  • 通常,散列是一種不可逆的轉換。 您將哈希值轉換回原始字符串/對象/任何內容的副本...因為原始的大部分/大部分信息內容已被丟棄 實際上,有無數個可能的輸入字符串散列到給定的散列值,並且無法知道哪一個是正確的。 (他們都是 。)

  • 在像MD5這樣的加密散列函數的情況下,情況更糟。 這些功能專門設計為不可逆。 或者更確切地說,它們被設計成使得對於給定的散列,恢復可能的輸入的問題在計算上是難以處理的。

現在碰巧MD5很弱......而且如果你有大量(但在技術上可行)數量的計算資源和時間,則可以反轉散列。 但是,這並沒有解決第一個要點。


最重要的是,如果您希望能夠恢復原始字符串,則需要對其進行加密而不是對其進行哈希處理。

暫無
暫無

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

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