Ho provato il seguente codice per produrre un digest SHA1 di una stringa:Non uscita Java SHA1 lo stesso comando di Linux sha1sum
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
public class SHA1 {
private static String encryptPassword(String password)
{
String sha1 = "";
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(password.getBytes("UTF-8"));
sha1 = byteToHex(crypt.digest());
}
catch(NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch(UnsupportedEncodingException e)
{
e.printStackTrace();
}
return sha1;
}
private static String byteToHex(final byte[] hash)
{
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
public static void main(String args[]){
System.out.println(SHA1.encryptPassword("test"));
}
}
Questo codice è basato su this question e this other question. Si noti che questo non è un duplicato di quelle domande poiché riguardano la formattazione dell'output.
Il problema è che produce un risultato diverso rispetto all'esecuzione della stessa stringa di input tramite il comando sha1sum
in Linux ->echo test|sha1sum
.
Java uscita codice per "test" ->a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
sha1sum nel terminale Linux per "test" ->4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
- Perché non sono la stessa cosa?
- Non la classe Java
MessageDigest
e l'utilità Linuxsha1sum
implementano lo stesso algoritmo?
si ottiene un cappello segreto per rispondere entro 5 minuti? Bene :-) –
Ho avuto lo stesso problema con 'sha1sum' stesso, non correlato a Java; il mio problema era con PHP. Sono grato di averti trovato la risposta. – Manngo