Problema com md5()
17/07/2014
0
Oi turma, na minha tabela a senha está criptografada com md5(), criei uma variável $senha = md5($senha), quando faço a pesquisa retorna null, se a senha informada é válida porque está retornando null?
Se eu mudar a senha no banco de dados para senha123 sem criptografia ele retorna true, só retorna quando está criptografada e dei um print na tela comparando $senha == $item['senha'] as senha conferem. O que poderia está causado o erro na query?
Se eu mudar a senha no banco de dados para senha123 sem criptografia ele retorna true, só retorna quando está criptografada e dei um print na tela comparando $senha == $item['senha'] as senha conferem. O que poderia está causado o erro na query?
$senha = isset($_POST['senha']) ? $_POST['senha'] : ''; $senha = md5($senha); $sql = "SELECT * FROM usuarios WHERE email = '$usuario' AND senha = '$senha'"; $query = pg_query($sql); $resultado = pg_fetch_all($query); $numRegistros = 0; foreach ($resultado as $link) { $numRegistros += !empty($link['email']) ? 1 : 0; } if ($query){ pg_free_result($query); } else { // se a consulta for mal sucedida return false; } // se houver apenas um usuário, retorna true return ($numRegistros == 1) ? true : false;
Adenes Junior
Curtir tópico
+ 0
Responder
Post mais votado
17/07/2014
Não acho que seja um bom modo realizar a busca e comparação do mode que está fazendo.
O mais interessante seria realizar uma busca no banco de dados apenas por login e comparar a senha retornada dentro do banco de dados com o md5 informado no PHP, mas nada impede de fazer do modo que está fazendo. O padrão md5 não é muito seguro para se gerar senhas, prefiro utilizar Blowfish[1].
Particularmente não sei como está sua estrutura de banco de dados, mas o que provavelmente pode estar ocorrendo é que o valor md5 retornado seja incompatível com a capacidade do campo, por exemplo, o código md5 gerado possui 40 caracteres e sua tabela é um varchar de 20.
[1]http://blog.thiagobelem.net/criptografando-senhas-no-php-usando-bcrypt-blowfish/
O mais interessante seria realizar uma busca no banco de dados apenas por login e comparar a senha retornada dentro do banco de dados com o md5 informado no PHP, mas nada impede de fazer do modo que está fazendo. O padrão md5 não é muito seguro para se gerar senhas, prefiro utilizar Blowfish[1].
Particularmente não sei como está sua estrutura de banco de dados, mas o que provavelmente pode estar ocorrendo é que o valor md5 retornado seja incompatível com a capacidade do campo, por exemplo, o código md5 gerado possui 40 caracteres e sua tabela é um varchar de 20.
[1]http://blog.thiagobelem.net/criptografando-senhas-no-php-usando-bcrypt-blowfish/
David Sylvestre
Responder
Mais Posts
17/07/2014
Ronaldo Lanhellas
Bom, se a pesquisa está retornando NULL é porque a senha é diferente da senha criptografada no banco, vamos pensar em algumas possibilidades:
1 - Antes de fazer o md5($senha) tente fazer um trim() na variável $senha, caso contrário espaços em branco podem ser criptografados levando a um MD5 diferente
2 - Cheque se a senha que está no banco está mesmo criptografada e também não tem nenhum espaço (novamente use o TRIM).
Caso nenhuma das dicas acima funcione, poste aqui um var_dump($senha) antes e depois de realizar o md5($senha). E poste também o conteúdo deste registro no banco de dados.
1 - Antes de fazer o md5($senha) tente fazer um trim() na variável $senha, caso contrário espaços em branco podem ser criptografados levando a um MD5 diferente
2 - Cheque se a senha que está no banco está mesmo criptografada e também não tem nenhum espaço (novamente use o TRIM).
Caso nenhuma das dicas acima funcione, poste aqui um var_dump($senha) antes e depois de realizar o md5($senha). E poste também o conteúdo deste registro no banco de dados.
Responder
17/07/2014
Adenes Junior
Muito obrigado David, você está certo devo verificar a senha depois de buscar o registro.
Alterei a forma de encriptação para Blowfish[1], obrigado pela diga. Agora deu certo.
Alterei a forma de encriptação para Blowfish[1], obrigado pela diga. Agora deu certo.
$sql = "SELECT * FROM usuarios WHERE email = '$usuario'"; $query = pg_query($sql); if (!($hash == $item['senha'])){ $this->erro = "A senha informada é inválida"; return false; }
Responder
Clique aqui para fazer login e interagir na Comunidade :)