2012-07-26 56 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