Question Comment puis-je générer un hachage MD5?


Existe-t-il une méthode pour générer un hachage MD5 d'une chaîne en Java?


888
2018-01-06 09:45


origine


Réponses:


java.security.MessageDigest est votre ami. Appel getInstance("MD5") pour obtenir un résumé de message MD5, vous pouvez utiliser.


534
2018-01-06 09:47



le MessageDigest La classe peut vous fournir une instance du résumé MD5.

Lorsque vous travaillez avec des chaînes et les classes de crypto assurez-vous de toujours spécifiez le codage dans lequel vous souhaitez insérer la représentation en octets. Si vous utilisez string.getBytes() il utilisera la plate-forme par défaut. (Toutes les plates-formes n'utilisent pas les mêmes valeurs par défaut)

import java.security.*;

..

byte[] bytesOfMessage = yourString.getBytes("UTF-8");

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);

Si vous avez beaucoup de données, jetez un oeil à la .update(byte[]) méthode qui peut être appelée à plusieurs reprises. Puis appelez .digest() pour obtenir le hachage résultant.


647
2018-01-06 09:58



Vous pourriez aussi vouloir regarder le DigestUtils classe de l'apache codec commun projet, qui fournit des méthodes très pratiques pour créer des condensés MD5 ou SHA.


249
2018-01-06 14:51



Si vous voulez réellement la réponse en tant que chaîne par opposition à un tableau d'octets, vous pouvez toujours faire quelque chose comme ceci:

String plaintext = "your text here";
MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(16);
// Now we need to zero pad it if you actually want the full 32 chars.
while(hashtext.length() < 32 ){
  hashtext = "0"+hashtext;
}

245
2018-01-07 19:20



Trouvé ceci:

public String MD5(String md5) {
   try {
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        byte[] array = md.digest(md5.getBytes());
        StringBuffer 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 (java.security.NoSuchAlgorithmException e) {
    }
    return null;
}

sur le site ci-dessous, je ne prends aucun crédit pour cela, mais c'est une solution qui fonctionne! Pour moi beaucoup d'autre code ne fonctionnait pas correctement, j'ai fini par manquer 0 dans le hachage. Celui-ci semble être le même que celui de PHP. la source: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093


148
2017-07-03 21:11



Voici comment je l'utilise:

final MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));
final byte[] resultByte = messageDigest.digest();
final String result = new String(Hex.encodeHex(resultByte));

où Hex est: org.apache.commons.codec.binary.Hex du Projet Apache Commons.


82
2017-10-01 10:28



Je viens de télécharger commons-codec.jar et a obtenu un php parfait comme md5. Voici Manuel.

Il suffit de l'importer dans votre projet et de l'utiliser

String Url = "your_url";

System.out.println( DigestUtils.md5Hex( Url ) );

Et voila.


78
2017-07-30 22:51



J'ai trouvé que c'était la façon la plus claire et la plus concise de le faire:

MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(StandardCharsets.UTF_8.encode(string));
return String.format("%032x", new BigInteger(1, md5.digest()));

55
2018-05-08 08:16



J'ai trouvé cette solution qui est beaucoup plus propre en termes d'obtention d'une représentation de chaîne à partir d'un hachage MD5.

import java.security.*;
import java.math.*;

public class MD5 {
    public static void main(String args[]) throws Exception{
        String s="This is a test";
        MessageDigest m=MessageDigest.getInstance("MD5");
        m.update(s.getBytes(),0,s.length());
        System.out.println("MD5: "+new BigInteger(1,m.digest()).toString(16));
    }
}

Le code a été extrait de ici.


32
2018-05-10 09:18