example convert java md5 message digest

java - convert - Obtener cadena MD5 de Message Digest



java string to md5 example (10)

Con la matriz de bytes, resultado del resumen del mensaje:

... byte hashgerado[] = md.digest(entrada); ... for(byte b : hashgerado) System.out.printf("%02x", Byte.toUnsignedInt(b));

Resultado (por ejemplo):
89e8a9f68ad3c4bba9b9d3581cf5201d

Entiendo cómo funciona, pero si quiero imprimir el MD5 como String, ¿cómo lo haría?

public static void getMD5(String fileName) throws Exception{ InputStream input = new FileInputStream(fileName); byte[] buffer = new byte[1024]; MessageDigest hash = MessageDigest.getInstance("MD5"); int read; do { read = input.read(buffer); if (read > 0) { hash.update(buffer, 0, read); } } while (read != -1); input.close(); }


Esta es otra versión de @anything respuesta:

StringBuilder sb = new StringBuilder(); for (int i = 0; i < digest.length; i++) { if ((0xff & digest[i]) < 0x10) { sb.append("0").append(Integer.toHexString((0xFF & digest[i]))); } else { sb.append(Integer.toHexString(0xFF & digest[i])); } } String result = sb.toString();


FYI ...

En ciertas situaciones esto no funcionó para mí

md5 = new java.math.BigInteger(1, digest.digest()).toString(16);

pero esto hizo

StringBuilder sb = new StringBuilder(); for (int i = 0; i < digest.length; i++) { if ((0xff & digest[i]) < 0x10) { sb.append("0").append(Integer.toHexString((0xFF & digest[i]))); } else { sb.append(Integer.toHexString(0xFF & digest[i])); } } String result = sb.toString();


Llame a hash.digest() para finalizar el proceso. Devolverá una matriz de bytes.

Puede crear una cadena a partir de un byte[] usando un constructor de cadenas, sin embargo, si quiere una cadena hexadecimal, tendrá que recorrer manualmente la matriz de bytes y calcular los caracteres.


Primero necesita obtener el resultado del byte[] del MessageDigest :

byte[] bytes = hash.digest();

Sin embargo, no puede imprimirlo fácilmente (con, por ejemplo, new String(bytes) ) porque contendrá binarios que no tendrán buenas representaciones de salida. Sin embargo, puedes convertirlo en hexadecimal para mostrarlo así:

StringBuilder sb = new StringBuilder(2 * bytes.length); for (byte b : bytes) { sb.append("0123456789ABCDEF".charAt((b & 0xF0) >> 4)); sb.append("0123456789ABCDEF".charAt((b & 0x0F))); } String hex = sb.toString();


Prueba esto

StringBuffer hexString = new StringBuffer(); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] hash = md.digest(); for (int i = 0; i < hash.length; i++) { if ((0xff & hash[i]) < 0x10) { hexString.append("0" + Integer.toHexString((0xFF & hash[i]))); } else { hexString.append(Integer.toHexString(0xFF & hash[i])); } }


Puede obtenerlo escribiendo menos:

String hex = (new HexBinaryAdapter()).marshal(md5.digest(YOUR_STRING.getBytes()))


También puede utilizar la biblioteca Apache Commons Codec. Esta biblioteca incluye métodos public static String md5Hex(InputStream data) y public static String md5Hex(byte[] data) en la clase DigestUtils . No es necesario que inventes esto tú mismo;)


String input = "168"; MessageDigest md = MessageDigest.getInstance("MD5"); byte[] md5sum = md.digest(input.getBytes()); String output = String.format("%032X", new BigInteger(1, md5sum));

o

DatatypeConverter.printHexBinary( MessageDigest.getInstance("MD5").digest("a".getBytes("UTF-8")))


/** * hashes: * e7cfa2be5969e235138356a54bad7fc4 * 3c9ec110aa171b57bb41fc761130822c * * compiled with java 8 - 12 Dec 2015 */ public static String generateHash() { long r = new java.util.Random().nextLong(); String input = String.valueOf(r); String md5 = null; try { java.security.MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); //Update input string in message digest digest.update(input.getBytes(), 0, input.length()); //Converts message digest value in base 16 (hex) md5 = new java.math.BigInteger(1, digest.digest()).toString(16); } catch (java.security.NoSuchAlgorithmException e) { e.printStackTrace(); } return md5; }