anche se il codice sopra può andare credo che l'ideale sia utilizzare un'impronta di messaggio per autenticarsi, cioè appena l'utente inserisce la sua password viene generato il codice hash, utilizzando cmq un salt e volendo quelche iterazione, e quando lo reinserisce viene ricalcolato l'hash e confrontato con quello già salvato, ecco un esempio:
Fatto quasto hai ottenuto l'hash della password in formato di array di byte, fatto questo quando vorrai confrontare la password immessa con la sua impronta dovrai estrare il salt dal messaggio attaccarlo alla password inserita e confrontare:codice:import java.security.*; public byte[] CalculateHash(String pass) { SecureRandom s = new SecureRandom(); byte[] salt = new byte[12];//decidi tu quando grande fare il salt s.nextBytes(salt); MessageDigest md = MessageDigest.getInstance("MD5");//oppure SHA-1 md.update(salt); md.update(pass.getBytes("UTF8")); byte[] hash = md.digest(); return hash; }
dovrebbe andare.codice:import java.security.*; import java.util.*;//per Arrays public boolean isCorrect(String pass, byte[] hash) { //hash è la password precedentemente salvata byte[] salt; byte[] p = pass.getBytes("UTF8"); System.arraycopy(hash, 0, salt, 0, 12); //se cambi le dimensioni del salt devi cambiare anche in arraycopy MessageDigest md = MessageDigest.getInstance("MD5"); md.update(salt); md.update(p); byte[] result = md.digest(); return Arrays.equals(hash, p); }
![]()

Rispondi quotando