Ho una tabella SQL con nomi utente e password. Le password sono codificate usando il metodo digest() di MessageDigest. Se codifico una password - diciamo "abcdef12" - con il metodo digest() di MessageDigest e poi la converto in valori esadecimali, la stringa è diversa da quella che faccio se faccio lo stesso usando il metodo SHA1 di PHP. Mi aspetto che questi valori siano esattamente gli stessi però.L'algoritmo MessageDigest SHA1 di Java restituisce risultati diversi dalla funzione SHA1 di php
codice che viene utilizzato per codificare le password:
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] passbyte;
passbyte = "abcdef12".getBytes("UTF-8");
passbyte = md.digest(passbyte);
La conversione della stringa esadecimale è fatto con questo metodo:
public static String convertStringToHex(String str) {
char[] chars = str.toCharArray();
StringBuffer hex = new StringBuffer();
for (int i = 0; i < chars.length; i++) {
hex.append(Integer.toHexString((int) chars[i]));
}
return hex.toString();
}
Password: ABCDEF12
Ecco la password restituita da molti generatori online SHA1-hash e PHP SHA1() - funzione: d253e3b d69ce1e7ce6074345fd5faa1a3c2e89ef
Ecco la password come codificato da MessageDigest: d253e3bd69ce1e7ce674345fd5faa1a3c2e2030ef
sto dimenticando qualcosa?
Igor.
Modifica: ho trovato qualcuno con un problema simile: C# SHA-1 vs. PHP SHA-1...Different Results?. La soluzione era cambiare le codifiche ... ma non posso cambiare le codifiche sul lato server poiché le password in quella tabella SQL non sono create dalla mia applicazione. Uso la codifica SHA1 lato client utilizzando una classe SHA1 JavaScript (più precisamente: una classe di Google Web Toolkit). Funziona e codifica la stringa come previsto, ma a quanto pare utilizzando caratteri ASCII ..
Grazie! La tua risposta ha risolto il mio problema. Stavo fallendo nel convertire correttamente l'array di byte in una stringa esadecimale! Ho usato il metodo da @stivlo e ha funzionato alla grande! Segnerò questa risposta come corretta, anche se in questo caso vorrei poter contrassegnare entrambe le risposte date come corrette! Grazie ad entrambi! – Igor