Quando ho calcolato in Java uno SHA-256 di una stringa con il seguente metodoQuale SHA-256 è corretto? Il Java SHA-256 digest o la riga di comando di Linux strumento
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());
}
ottengo:
5e884898da2847151d0e56f8dc6292773603dd6aabbdd62a11ef721d1542d8
sulla riga di comando I effettuare le seguenti operazioni (ho bisogno del -n
di non aggiungere una nuova riga):
echo -n "password" | sha256sum
e ottenere
01.235.164,106 mila5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
se confrontiamo questi più strettamente Trovo 2 sottili differenze
5e884898da2847151d0e56f8dc6292773603dd6aabbdd62a11ef721d1542d8
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
o:
5e884898da28 47151d0e56f8dc6292773603d d6aabbdd62a11ef721d1542d8
5e884898da28 0 47151d0e56f8dc6292773603d 0 d6aabbdd62a11ef721d1542d8
Quale delle due è corretta qui?
Risultato: Entrambi sono, ma mi sbagliavo ...
fissata esso utilizzando:
StringBuffer sb = new StringBuffer();
for(byte b : hash) {
sb.append(String.format("%02x", b));
}
Grazie!
Yep, appena visto il tuo aggiornamento con codice - questo è il problema. 'Integer.toHexString()' non scriverà il numero iniziale 0. Potrebbe essere più semplice solo valori del caso speciale inferiori a 16 e scrivere uno '0' in primo piano. –
Sciocco! Grazie per la rapida risposta! Sono appena stato fortunato con la mia implementazione MD5. Grande risparmio ... –