2012-07-26 5 views
5

Quelqu'un peut-il savoir comment convertir le MD5 en Chaîne. Dans mon cas, j'ai enregistré le mot de passe dans MD5 dans la base de données. J'essaye de récupérer le mot de passe et l'afficher dans la chaîne pour l'édition.Convertir MD5 en String en Java

C'est ce que je l'ai fait pour convertir la chaîne en format Crypter:

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; 
} 

Je ne sais pas comment convertir le format de chiffrement en chaîne pour modifier le mot de passe.

+11

md5 est de un algorithme de manière, vous ne pouvez pas obtenir le mot de passe simple de retour chiffré – bugwheels94

+0

Hashing algorithmes p roduire un tel résultat que vous ne pouvez pas récupérer l'entrée originale du résultat. Si vous souhaitez une telle fonctionnalité, essayez d'utiliser le chiffrement plutôt que le hachage. (RSA, par exemple) – Lopina

+1

Ajout à Ankit: Et ce trait à sens unique est la raison pour laquelle il est stocké en tant que MD5 en premier lieu. –

Répondre

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

Le code ci-dessus convertir la chaîne en format hexadécimal et Ma question est de savoir comment revenir à la chaîne. – bharathi

+5

MD% c'est un algorithme à sens unique, vous ne pouvez pas convertir la chaîne hexadécimale md5 en chaîne d'origine. – vchyzhevskyi

+0

Il peut être utile d'ajouter "UTF-8" comme argument sur getBytes car cela peut générer un mauvais hachage lors de l'utilisation de caractères latins, par exemple. – Raimundo

6

MD5 est une fonction de hachage unilatérale. Donc vous ne pouvez pas le décoder. C'est pourquoi sur de nombreux sites Web vous avez des options "récupérer mot de passe" en créant un nouveau.

More about MD5

0

Code pour convertir la chaîne à 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

précisément le contraire de ce qui a été demandé! –

-3

Je pense que c'est la façon la plus élégante de le faire:

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

le contraire de ce qui a été demandé! –