Ciao a tutti,
ho questo problema:
ho implementato una applicazione in java che prevede un form per l'iscrizione e un form per il login. Quando faccio il login devo confrontare le password dell'utente (quella salvata nel database con quella appena inserita). Al momento dell'inserimento nel database ho usato salt, l'ho concatenato alla password e ho fatto l'hash. All'hash ho concatenato il salt (in definitiva ho salvato il salt+hash nel database). Nel database mi sono salvato anche il salt relativo all'utente (altrimenti come faccio a ricostruire l'hash da confrontare?) e qui arriva il problema. Il salt è una stringa nel database (varchar) e mi serve come array di byte per fare il confronto con l'hash. La domanda è: come faccio a convertire il salt (che nel db è una stringa) in array di byte? Mi serve un array di byte perché ho una funzione che mi calcola il digest e vuole in input un array di byte. Probabilmente per gestire le password ci sono altri modi che non conosco. Spero che abbiate capito il problema. Questo è il codice:
codice:public static byte[] digest(byte[] password, byte[] salt) { MessageDigest sha = null; try { sha = MessageDigest.getInstance("MD5"); // SHA = Secure Hash Algorithm, standard del NIST } catch (NoSuchAlgorithmException e) { System.out.println("Algoritmo richiesto non supportato"); } sha.update(salt); sha.update(password); byte[] impronta = sha.digest(); byte[] risultato = new byte[impronta.length + salt.length]; System.arraycopy(impronta, 0, risultato, 0, impronta.length); System.arraycopy(salt, 0, risultato, impronta.length, salt.length); return risultato; } public static byte[] getSalt(byte[] digest) { byte[] salt = new byte[12]; System.arraycopy(digest, digest.length - 12, salt, 0, salt.length); return salt; } public static boolean verify(byte[] passSulDB, byte[] passInChiaro) { byte[] saltSulDB = getSalt(passSulDB); byte[] digest2 = digest(passInChiaro, saltSulDB); if (passSulDB.length != digest2.length) { return false; } else { for (int i = 0; i < passSulDB.length; ++i) { if (passSulDB[i] != digest2[i]) { return false; } } return true; } }

Rispondi quotando

