2012-07-26 2 views
5

Может ли кто-либо знать, как преобразовать MD5 в String. В моем случае я сохранил пароль в MD5 в базе данных. Я пытаюсь восстановить пароль и отобразить его в строке для цели редактирования.Преобразование MD5 в строку в java

Это то, что я сделал для преобразования строки в формат Encrypt:

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

+0

Хеширующие алгоритмы p создайте такой результат, что вы не сможете вернуть исходный результат из результата. Если вы хотите такую ​​функциональность, попробуйте использовать шифрование по хэшированию. (RSA, например) – Lopina

+1

Добавление в Ankit: И эта односторонняя черта является основной причиной для ее хранения в качестве MD5 в первую очередь. –

ответ

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

+5

MD% это односторонний алгоритм, вы не можете преобразовать шестую строку md5 обратно в исходную строку. – vchyzhevskyi

+0

Может быть полезно добавить «UTF-8» в качестве аргумента в getBytes, поскольку он может генерировать неправильный хэш при использовании латинских символов, например. – Raimundo

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

точно противоположно тому, что было предложено! –

-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

напротив того, что было предложено! –

Смежные вопросы