Criptografia MD5 não esta batendo com a do BD!

4 respostas
ramaciotti

ola, pessoal

Bem, estou criando uma aplicacao web e empaquei…rsrsr…estou com uma pagina de login, mas não estou conseguindo fazer com que a minha funcao que transforma o MD5 para comparar com a chave que ja esta no BD fique igual, eu nao estou errando a senha…srsrsrsrs…

tenho um jsp q chama a funcao da classe que controla o DAO:

String senhaCript  = controleUsuario.criptografaSenha(request.getParameter("senha"));

esta eh parte de uma classe que controla o DAO:

public String criptografaSenha(String senha) throws NoSuchAlgorithmException { return dao.criptografaSenhaUsuario(senha); }

a minha funcao eh a seguinte:

public String criptografaSenhaUsuario(String senha) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("MD5"); BigInteger hash = new BigInteger(1, md.digest(senha.getBytes())); String s = hash.toString(16); if (s.length() % 2 != 0) { s = "0" + s; } return s; }

Bem, ela me retorna um codigo MD5, mas infelizmente nao me retorna o certo, e eu nao sei o porque, por isso peço ajuda de todos…

Obrigado antecipadamente!!

Vinícius Ramaciotti

4 Respostas

tiagoscd

Olá!

Não seria mais fácil tratar isso diretamente no banco de dados?

Não sei qual banco está utilizando, mas segue um exemplo do MySQL:

SELECT usuario FROM tabela WHERE senha LIKE MD5('sua_senha');

Espero ter ajudado.

Até mais

marcos.junqueira

Verifica se seu método está retornando o mesmo md5 que algum utilitário de md5.

no linux se não me engano você executa md5sum

Se estiverem diferentes sugiro que verifique sua implementação.

Veja se ajuda, o seguinte código calcula o hash de um arquivo.

public static String hash( File file ) {
        return convertBytetoHex(hashf(file));
    }

    public static boolean verify( File file, String hash ) {
        String hexHash = hash(file);
        return hexHash.equals(hash);
    }

    private static byte[] hashf( File file ) {
        byte[] retValue = null;
        MessageDigest md = null;
        DigestInputStream digin = null;
        try {
            md = MessageDigest.getInstance(ALGORITHM_MD5);
            digin = new DigestInputStream(new DataInputStream(new BufferedInputStream(new FileInputStream(
                    file))), md);
            byte[] buffer = new byte[ BUFSIZE ];
            while (digin.read(buffer, 0, BUFSIZE) != - 1) {
                //Do nothing, the digest is calculated automatically as file is read in.
            }
            retValue = md.digest();
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(HashUtility.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(HashUtility.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (digin != null) {
                try {
                    digin.close();
                } catch (IOException ex) {
                    Logger.getLogger(HashUtility.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return retValue;
    }

    private static String convertBytetoHex( byte[] bytes ) {
        String retValue = null;
        BigInteger bg = new BigInteger(1, bytes);
        retValue = bg.toString(HEX_RADIX);
        return retValue;
    }
T

Se a senha contiver caracteres especiais ou acentos pode ser que não bata mesmo. O Encoding deve ser igual para todas as aplicações que lidam com a senha.

ramaciotti

huauhauha…

AEEEEEEEEEEE GALERAAAAAAAAAAA!!

AMO VCS DO FUNDO DO CORACAO!!!

huahuahua…

Brigadaum…

Abraçossssssssssssss

Criado 2 de março de 2009
Ultima resposta 2 de mar. de 2009
Respostas 4
Participantes 4