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
            [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