2012-07-26 43 views
5

任何人都可以知道如何將MD5轉換爲字符串。在我的情況下,我已將密碼保存在數據庫中的MD5中。我正在嘗試檢索密碼並將其顯示在字符串中以便進行編輯。將MD5轉換爲java中的字符串

這是我的字符串轉換爲加密格式進行:

public static String encrypt(String source) { 
    String md5 = null; 
    try { 
     MessageDigest mdEnc = MessageDigest.getInstance("MD5"); //Encryption algorithm 
     mdEnc.update(source.getBytes(), 0, source.length()); 
     md5 = new BigInteger(1, mdEnc.digest()).toString(16); // Encrypted string 
     } 
    catch (Exception ex) { 
     return null; 
    } 
    return md5; 
} 

我不知道該怎麼加密格式轉換爲字符串編輯密碼。

+11

MD5是一個單你不能從加密的密碼中得到明文密碼 – bugwheels94 2012-07-26 08:34:55

+0

散列算法p導致這樣的結果,你無法從結果中取回原始輸入。如果你希望這樣的功能,請嘗試使用散列加密。 (例如,RSA) – Lopina 2012-07-26 08:36:27

+1

添加到Ankit中:單向特徵首先是將其存儲爲MD5的全部原因。 – 2012-07-26 08:37:16

回答

11
String password = "123456"; 

    MessageDigest md = MessageDigest.getInstance("MD5"); 
    md.update(password.getBytes()); 

    byte byteData[] = md.digest(); 

    StringBuffer sb = new StringBuffer(); 
    for (int i = 0; i < byteData.length; i++) 
     sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); 

    System.out.println("Digest(in hex format):: " + sb.toString()); 
+0

上述代碼將字符串轉換爲十六進制格式並我的問題是如何恢復到字符串。 – bharathi 2012-07-26 10:01:34

+5

MD%它是單向算法,不能將md5十六進制字符串轉換回原始字符串。 – vchyzhevskyi 2012-07-26 10:04:52

+0

在getBytes上添加「UTF-8」作爲參數可能很有用,因爲它在使用拉丁字符時可能會產生錯誤的哈希值。 – Raimundo 2015-10-19 11:21:28

6

MD5是單面散列函數。所以你不能解碼它。這就是爲什麼在許多網站上,您可以通過創建新的選項來「檢索密碼」。

More about MD5

0

代碼字符串轉換爲MD5

private static String convertToMd5(final String md5) throws UnsupportedEncodingException { 
     StringBuffer sb=null; 
     try { 
      final java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); 
      final byte[] array = md.digest(md5.getBytes("UTF-8")); 
      sb = new StringBuffer(); 
      for (int i = 0; i < array.length; ++i) { 
       sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); 
      } 
      return sb.toString(); 
     } catch (final java.security.NoSuchAlgorithmException e) { 
     } 
     return sb.toString(); 
    } 
+0

所要求的完全相反,正好與所要求的相反! – 2018-03-02 16:59:31

-3

我認爲這是最優雅的方式來做到這一點:

public String getMD5(String data) { 
     String result = null; 
     MessageDigest md; 
     try { 
      md = MessageDigest.getInstance("MD5"); 
      md.update(data.getBytes(Charset.forName("UTF-8"))); 
      result = String.format(Locale.ROOT, "%032x", new BigInteger(1, md.digest())); 
     } catch (NoSuchAlgorithmException e) { 
      throw new IllegalStateException(e); 
     } 
     return result; 
} 

`

+0

與所要求的相反! – 2018-03-02 17:00:16