Cuando calculo en Java un SHA-256 de una cadena con el siguiente método¿Qué SHA-256 es correcto? El Java SHA-256 digestión o la línea de comandos de Linux herramienta
public static void main(String[] args) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest("password".getBytes());
StringBuffer sb = new StringBuffer();
for(byte b : hash) {
sb.append(Integer.toHexString(b & 0xff));
}
System.out.println(sb.toString());
}
me sale:
5e884898da2847151d0e56f8dc6292773603dd6aabbdd62a11ef721d1542d8
en la línea de comandos I hacer lo siguiente (necesito el -n
para no añadir un salto de línea):
echo -n "password" | sha256sum
y obtener
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
si comparamos estos más de cerca Encuentro 2 sutiles diferencias
5e884898da2847151d0e56f8dc6292773603dd6aabbdd62a11ef721d1542d8
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
o:
5e884898da28 47151d0e56f8dc6292773603d d6aabbdd62a11ef721d1542d8
5e884898da28 0 47151d0e56f8dc6292773603d 0 d6aabbdd62a11ef721d1542d8
¿Cuál de los 2 es correcto en este caso?
Resultado: Ambos son, pero estaba mal ...
fija mediante el uso de:
StringBuffer sb = new StringBuffer();
for(byte b : hash) {
sb.append(String.format("%02x", b));
}
Gracias!
Sí, acabo de ver su actualización con código - este es el problema. 'Integer.toHexString()' no escribirá el 0 principal. Podría ser más fácil solo para los valores de casos especiales menores que 16 y escribir un '0' al frente. –
¡Tonto! ¡Gracias por la rápida respuesta! Acabo de tener suerte con mi implementación de MD5. Great save ... –