¿Cómo puedo generar un hash MD5 en Java?

5 minutos de lectura

¿Como puedo generar un hash MD5 en Java
akshay

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

  • stackoverflow.com/questions/304268/…

    – Leif Grünwoldt

    7 sep 2012 a las 20:07

  • MD5 puede no ser seguro como función de seguridad unidireccional, pero sigue siendo bueno para aplicaciones genéricas de suma de comprobación.

    – oxidado

    6 de febrero de 2015 a las 15:57

1646968328 455 ¿Como puedo generar un hash MD5 en Java
bomba

Necesitas java.security.MessageDigest.

Llamada MessageDigest.getInstance("MD5") para obtener una instancia MD5 de MessageDigest puedes usar.

El cálculo del hash haciendo uno de:

  • Alimente toda la entrada como un byte[] y calcular el hash en una operación con md.digest(bytes).
  • Alimentar el MessageDigest una byte[] fragmento a la vez llamando md.update(bytes). Cuando haya terminado de agregar bytes de entrada, calcule el hash con
    md.digest().

los byte[] devuelto por md.digest() es el hash MD5.

  • Una cosa que no se menciona aquí, y me tomó por sorpresa. Las clases MessageDigest NO son seguras para subprocesos. Si van a ser utilizados por diferentes subprocesos, simplemente cree uno nuevo, en lugar de intentar reutilizarlos.

    – mjuárez

    7 de marzo de 2013 a las 6:34

  • Utiliza múltiples métodos para mutar su estado interno. ¿Cómo puede sorprender en absoluto la falta de seguridad de los subprocesos?

    – bomba

    25 de abril de 2013 a las 7:57

  • @Bombe: ¿por qué deberíamos esperar tener saber sobre el estado interno de MessageDigest?

    – Dan Barowy

    1 de julio de 2014 a las 14:10

  • @DanBarowy bueno, tú están mutarlo (es decir, llamar a métodos que no devuelven valores pero hacen que otros métodos devuelvan valores diferentes), por lo que hasta que se demuestre lo contrario, siempre debe asumir que no es seguro para subprocesos hacerlo.

    – bomba

    9 de julio de 2014 a las 18:17

  • @Traubenfuchs MessageDigest le permite ingresar los datos en fragmentos. Eso no sería posible con un método estático. Aunque puede argumentar que deberían haber agregado uno de todos modos por conveniencia cuando puede pasar todos los datos a la vez.

    – usuario253751

    16 de agosto de 2015 a las 12:39

  • @BalusC: no es cierto, el método BigInteger.toString devolverá el número completo en la base especificada. 0x0606 se imprimirá como 606, solo se omiten los ceros finales,

    – arácnido

    29 de agosto de 2010 a las 22:29

  • Pequeño detalle: m.reset() no es necesario justo después de llamar a getInstance. Más menor: ‘su texto aquí’ requiere comillas dobles.

    – David Leppik

    19 de abril de 2011 a las 15:28

  • Desde Java 11 en adelante, puede usar hashtext = "0".repeat(32 - hashtext.length()) + hashtext en vez de whilepor lo que los editores no le advertirán que está concatenando cadenas dentro de un bucle.

    – Tomás

    14 mayo 2019 a las 13:29

  • En lugar de m.update(plaintext.getBytes()); Recomendaría especificar la codificación. como m.update(plaintext.getBytes(“UTF-8”)); getBytes() no garantiza la codificación y puede variar de un sistema a otro, lo que puede generar resultados MD5 diferentes entre sistemas para la misma cadena.

    – usuario1819780

    27 de marzo de 2020 a las 5:35


¿Como puedo generar un hash MD5 en Java
luz

También es posible que desee ver el DigestUtils clase de apache códec común project, que proporciona métodos muy convenientes para crear resúmenes MD5 o SHA.

  • En particular, los métodos que devuelven representaciones codificadas “seguras” de los datos de byte en forma de cadena.

    – robo

    7 de enero de 2009 a las 19:21

  • Sin embargo, no hay una manera fácil de incluir la clase DigestUtils en su proyecto sin agregar una tonelada de bibliotecas o portar la clase “por mano”, lo que requiere al menos dos clases más.

    – iuiz

    23 de julio de 2011 a las 20:52


  • Tampoco puedo encontrarlo en maven repos. Grrrr.

    – araña chispeante

    4 oct 2011 a las 16:05

  • Debería estar en los repositorios centrales de Maven, a menos que me esté volviendo loco: groupId=commons-codec artefactoId=commons-codec version=1.5

    –Nick Spacek

    12/10/2011 a las 17:10


1646968329 250 ¿Como puedo generar un hash MD5 en Java
dac2009

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 tomo crédito por ello, ¡pero es una solución que funciona! Para mí, muchos otros códigos no funcionaron 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

  • En particular, los métodos que devuelven representaciones codificadas “seguras” de los datos de byte en forma de cadena.

    – robo

    7 de enero de 2009 a las 19:21

  • Sin embargo, no hay una manera fácil de incluir la clase DigestUtils en su proyecto sin agregar una tonelada de bibliotecas o portar la clase “por mano”, lo que requiere al menos dos clases más.

    – iuiz

    23 de julio de 2011 a las 20:52


  • Tampoco puedo encontrarlo en maven repos. Grrrr.

    – araña chispeante

    4 oct 2011 a las 16:05

  • Debería estar en los repositorios centrales de Maven, a menos que me esté volviendo loco: groupId=commons-codec artefactoId=commons-codec version=1.5

    –Nick Spacek

    12/10/2011 a las 17:10


1646968329 972 ¿Como puedo generar un hash MD5 en Java
azulado

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 Hexadecimal es: org.apache.commons.codec.binary.Hex desde el Proyecto Apache Commons.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad