Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 485857
            [titulo] => Problema com md5()
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-07-17 16:40:53
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 281152
            [status] => A
            [isExample] => 
            [NomeUsuario] => David A. Sylvestre
            [Login] => teenks.toone@hotmail.com
            [Apelido] => 
            [Foto] => 
            [Conteudo] => 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][url:descricao=http://blog.thiagobelem.net/criptografando-senhas-no-php-usando-bcrypt-blowfish/]http://blog.thiagobelem.net/criptografando-senhas-no-php-usando-bcrypt-blowfish/[/url] ) )

Problema com md5()

PHP
Adenesjr
   - 17 jul 2014

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?
#Código
$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;

Post mais votado

David Sylvestre
   - 17 jul 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/

1
|
0

Ronaldo Lanhellas
   - 17 jul 2014

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.

0
|
0

Adenesjr
   - 17 jul 2014

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.

#Código
$sql = "SELECT *
FROM usuarios
WHERE email = '$usuario'";

$query = pg_query($sql);

if (!($hash == $item['senha'])){
$this->erro = "A senha informada é inválida";
return false;
}

0
|
0

David Sylvestre
   - 18 jul 2014

Fico feliz que tenha dado certo :D

0
|
0

William (devwilliam)
   - 21 jul 2014

Finalizando tópico!

0
|
0