Pregunta ¿Cómo puedo generar un hash MD5?


¿Hay algún método para generar hash MD5 de una cadena en Java?


888
2018-01-06 09:45


origen


Respuestas:


java.security.MessageDigest es tu amigo. Llamada getInstance("MD5") para obtener un resumen del mensaje MD5 que puede usar.


534
2018-01-06 09:47



los MessageDigest class puede proporcionarle una instancia del resumen de MD5.

Cuando trabaje con cadenas y las clases de cifrado, asegúrese de siempre especifica la codificación en la que quieres que esté la representación de bytes. Si solo usas string.getBytes() usará la plataforma predeterminada. (No todas las plataformas usan los mismos valores predeterminados)

import java.security.*;

..

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

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

Si tiene muchos datos, eche un vistazo al .update(byte[]) método que puede llamarse repetidamente. Luego llame .digest() para obtener el hash resultante.


647
2018-01-06 09:58



También es posible que desee mirar el DigestUtils clase del apache códec de los comunes proyecto, que proporciona métodos muy convenientes para crear resúmenes MD5 o SHA.


249
2018-01-06 14:51



Si realmente quieres que la respuesta vuelva como una cadena en lugar de una matriz de bytes, siempre puedes hacer algo como esto:

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



Encontró esto:

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

en el sitio a continuación, no me atribuyo ningún mérito, ¡pero es una solución que funciona! Para mí, muchos otros códigos no funcionaban correctamente. Terminé perdiendo 0 en el hash. Este parece ser el mismo que tiene PHP. fuente: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093


148
2017-07-03 21:11



Así es como lo uso:

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

donde Hex es: org.apache.commons.codec.binary.Hex desde el Proyecto de Apache Commons.


82
2017-10-01 10:28



Acabo de descargar commons-codec.jar y obtuve un php perfecto como md5. Aquí está manual.

Solo importelo a su proyecto y use

String Url = "your_url";

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

Y ahí lo tienes.


78
2017-07-30 22:51



He encontrado que esta es la forma más clara y concisa de hacerlo:

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



Encontré esta solución que es mucho más limpia en términos de obtener una representación de Cadena de un hash 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));
    }
}

El código fue extraído de aquí.


32
2018-05-10 09:18



Otra opción es usar el Métodos de hash de guayaba:

Hasher hasher = Hashing.md5().newHasher();
hasher.putString("my string");
byte[] md5 = hasher.hash().asBytes();

Útil si ya está usando guayaba (que si no es así, probablemente debería hacerlo).


30
2017-11-12 16:50