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