gerei uma senha e guardei no banco de dados em hash md5 da seguinte maneira
publicvoidrecebeEGuardaSenhaEmHash(Stringusuario,StringsenhaIntroduzidaPeloUtilizador){publicMessageDigestmd;try{md=MessageDigest.getInstance("MD5");}catch(Exceptionex){ex.printStackTrace();}//Aqui ele convert a senha em hash md.update(senhaIntroduzidaPeloUtilizador.getBytes());byte[]hashMd5=md.digest();//Aqui imprime a senha em hashSystem.out.println(hashMd5.toString());//este metodo guarda a senha e utilizador no banco de dados como novo usuário.guardaSenha(usuario,hashMd5.toString());}
tudo corre bem,… eu vou ao banco de dados e vejo que la estao os dados de utilizador e a senha ja encriptada.
O problema é o seguinte :
Quando um utilizador fornecer a sua senha, como é que eu vou validar esta senha se ela está em hash ?
disseram me que o ideal seria eu converter a senha recebida tambem em hash e comparar as duas. mas o meu problema é saber como faço para retirar a senha do banco e comparar. pois quando eu retiro a senha do banco ela vem como string.
Voce ta fazendo um cast de um objecto com o nome md5 o que é isso ?
se bem percebi voce ta comparando strings nao é ?
B
bombbr
LuisClaudio:
Voce ta fazendo um cast de um objecto com o nome md5 o que é isso ?
Neste pseudo código md5(String str), é um método de gera um hash MD5 e retorna este hash como uma String.
L
LuisClaudio
Ola, Por favor tente correr este codigo e me diga porque os resultados nao estao dando certo.
importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importsun.misc.BASE64Encoder;publicclassencriptar{publicvoidencripta(Stringsenha){MessageDigestdigest;Stringsenha2="8U3mUqz83TVVkqG7FS55uw==";//é assim que ele foi guardado no banco, estou simulando que ele tenha vindo do bancotry{digest=MessageDigest.getInstance("MD5");digest.update(senha.getBytes());BASE64Encoderencoder=newBASE64Encoder();// Aqui vou imprimir as strings encriptadas e seus tamanhosSystem.out.println("Senha 1 : "+encoder.encode(digest.digest()).toString().trim());System.out.println("Tamnaho Senha 1 : "+encoder.encode(digest.digest()).toString().trim().length());System.out.println("Senha 2 : "+senha2.trim());System.out.println("Tamnaho Senha 1 : "+senha2.trim().length());//Aqui vou comparar as duas para validar os dadosif(encoder.encode(digest.digest()).toString().trim().equals(senha2.trim())){System.out.println("Login com sucesso ");}else{System.out.println("Esta senha é inválida");}}catch(NoSuchAlgorithmExceptionns){ns.printStackTrace();}}publicstaticvoidmain(String[]args){encriptarec=newencriptar();ec.encripta("luisclaudio");}}
Acabei não explicando acima pq sua senha ficava diferente.
Quando vc usa essa linha encoder.encode(digest.digest()).toString().trim() ela criptografa sua senha. Se vc usar novamente essa linha, ela tipo, vai criptografar o que já foi criptografado.
Não sei o motivo, mas é o que está acontecendo.
Por isso quando vc escreve na tela a senha ela é o resultado experado, e quando faz o teste é outro resultado.
O que deve fazer é criar uma variavel que receba na primeira vez o resultado da criptografia e então testar essa variavel no seu IF.