Domanda

Ok, sono un po 'confuso. Sto cercando di utilizzare MessageDigest per archiviare le mie password nel database come hash MD5, quindi estrarre l'hash per controllare la password di un utente quando provano ad accedere.

Quindi, quando un utente register, su register.jsp, utilizzo questo codice per convertire la loro password (la stringa viene chiamata "password" nel codice) in un hash (chiamato "hashtext"):

MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(password.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(16);

while(hashtext.length() < 32 ){
  hashtext = "0"+hashtext;
}

Quindi, devo gestire come controllare la password immessa quando un utente cerca di accedere. Ho un'altra pagina: login.jsp, in cui eseguo esattamente lo stesso codice come sopra sulla password inserita e controllo il risultato rispetto all'hash che estrai dal mio database.

Tuttavia, questo non funziona, e presumo sia perché viene creato un nuovo oggetto MessageGest (MessageDigest.getInstance ("MD5");) e quindi l'algoritmo funziona in modo diverso.

Devo assicurarmi che lo stesso oggetto MessageDigest sia usato su login.jsp come register.jsp?

È stato utile?

Soluzione

Tuttavia, questo non funziona, e presumo sia perché viene creato un nuovo oggetto MessageGest (MessageDigest.getInstance ("MD5");) e quindi l'algoritmo funziona in modo diverso.

Questo non è vero.


Devo assicurarmi che lo stesso oggetto MessageDigest sia usato su login.jsp come register.jsp?

No.


Il tuo problema è causato da qualcos'altro. Probabilmente non hai salvato l'hash della password iniziale nel DB o non hai paragonato all'hash della password immessa o stai confrontando l'hash su un sistema che utilizza un diverso chatset predefinito su getBytes(). Controlla i valori di hash effettivi prima di trarre conclusioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top