2016-09-22 151 views
2

我有java三個字符串。比方說例子。Java將字符串轉換爲md5,反之亦然

String test = "Hi, "; 
String test1 = "this is "; 
String test2 = "Java programming!"; 

我想結合這些3字符串,並將其更改爲md5格式。我怎麼辦?我爲一個字符串使用MessageDigest類,但我不知道如何在更改爲md5之前追加3個字符串。我想要將md5改回字符串。我需要外部圖書館嗎?

+0

你不能改回md5。這不是一種加密或編碼 - 它是一種*散列*。只是串聯你的字符串。 – RealSkeptic

回答

2

MD5是而不是格式或加密算法。

MD5是散列函數。這意味着,長文本可以簡化摘要 - 除了非常短的輸入之外,這種轉換顯然是有損的。一般來說,沒有從MD5回到純文本。

+0

好的,那我有個問題。我將3個字符串轉換爲散列碼。 md5可以爲不同的字符串生成重複的字符嗎? ,如果我轉換一千個字符串。 –

+0

是的,MD5可以爲兩個不同的輸入產生相同的輸出,但是對於兩個(甚至數千個)不同的隨機輸入發生這種情況的機率非常小。 –

2

好倒車MD5是不是真的可行的 -

  • 可以有不止一個字符串,給出了相同的MD5(它被稱爲哈希碰撞)
  • 它的目的是很難「反向「

你會看到很多提供反向MD5的網站(如 - Option-1,option-2)。 這些網站存儲已經使用的「String和MD5」的映射(所以如果你使用複雜的字符串,他們將無法推斷出原來的字符串)。

搬回部分 - 1

MessageDigest可以用來計算在Java中的給定字符串的MD5。 它的用法很簡單 -

 String testString="someText"; 
     MessageDigest md = MessageDigest.getInstance("MD5"); 
     byte[] messageDigest = md.digest(testString.getBytes()); 
     BigInteger number = new BigInteger(1, messageDigest); 
     String hashtext = number.toString(16); 

所以你的問題這取決於你怎麼想創建哈希 -

路1 - 正如你問我們能有 -

StringBuilder simpleString=new StringBuilder(test); 
simpleString.append(test1); 
simpleString.append(test2); 
String testString=simpleString.toString(); 

最後調用上面定義的方法,輸入爲 - testString

方式2 - 我會建議您使用MD5的MD5進行安全校驗。

Output = MD5(MD5(test)+MD5(test1)+MD5(test2)) 

你可以嘗試創建上的3個字符的字符串蠻力攻擊。假設只允許使用英文字母(A-Z,a-z)和數字(0-9),在這種情況下只有623(238,328)種組合。

希望它有幫助。 :)

相關問題