1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Inverter o md5

Discussão em 'Web Development' iniciada por khaluh, 29 de Junho de 2007. (Respostas: 10; Visualizações: 1771)

  1. khaluh

    khaluh Power Member

    Viva


    Ao gravar na base de dados as passwords, estou a gravar da seguinte maneira:

    (nomes e dados ficticios, adaptados apenas para o efeito)


    PHP:
    //frases para encriptar
    $frase_um "texto para encriptar";
    //captura do username do utilizador
    $utilizador $_POST['utilizador'];
    //captura da password e concatenada com a frase_um, guardada com encriptação md5 
    $password md5($_POST['password'] . $frase_um);
    Depois, para verificar a existência do utilizador é da seguinte forma:
    PHP:
    $user_valido 
                     
    "
                        SELECT    login_nivel, login_activo
                        FROM       login 
                        WHERE     login_utilizador = '
    $utilizador
                        AND         login_password = md5('
    $password'.'$frase_um')
                     "
    ;         
    $resultado mysql_query($user_valido);
    Depois, para seleccionar a página a direccionar:
    PHP:
    $existe mysql_fetch_array($resultado);
    // Verificação de existência de utilizador e qual o nível
    // Verificação se está activo (ou seja, pode aceder à página respectiva)
            
    if ($existe['login_nivel'] == '1 ' && $existe['login_activo'] == 'S')
                {
                    
    header("location:../pagina_tipo_1.php");
                }
            elseif (
    $existe['login_nivel'] == '2' && $existe['login_activo'] == 'S')
                {
                    
    header("location:../pagina_tipo_2.php");
                }
            elseif (
    $existe['login_nivel'] == '3' && $existe['login_activo'] == 'S')
                {
                    
    header("location:../pagina_tipo_3.php");
                }            
            else
                {
                    
    header("location:../index.php");
                }
    O problema é que está sempre a ir para o else. Sou eu que estou a fazer mal? Se sim, qual a melhor maneira para fazer o que quero?
     
    Última edição: 29 de Junho de 2007
  2. Demio

    Demio Power Member

    Tenta antes com isto:

    PHP:
    $user_valido 
                     
    "
                        SELECT    login_nivel, login_activo
                        FROM       login 
                        WHERE     login_utilizador = '
    $utilizador
                        AND         login_password = '"
    .md5('$password'.'$frase_um')"'";  
     
  3. khaluh

    khaluh Power Member

    Viva

    Tentei com o que disseste (e mudei as variaveis para as minhas) e agora tenho o seguinte erro:
    A linha 35 é a linha
    PHP:
    AND     login_password '".md5('$password'.'$frase_um')"'";
    A $frase_um está definida antes da $user_valido
     
    Última edição: 30 de Junho de 2007
  4. Demio

    Demio Power Member

    Não podes postar o que vem antes? Assim é um pouco difícel de perceber o erro.
     
  5. khaluh

    khaluh Power Member

    Ok, depois altero tudo :lol:

    Este é o ficheiro que "trata" os logins

    PHP:
    <?php session_start();
        include 
    '../ligar_a_bd.php';
        include 
    '../consultas_sql.php';
        
    $frase_um "aqui_fica_a_frase";
                                            
    // Inicio da Validação
                                            // Verificação de inserção de username
        
    if (isset($_POST['username'])) 
            
    $username $_POST['username'];
                                            
    // Verificação de inserção de password
        
    if (isset($_POST['passwd']))    
            
    $passwd $_POST['passwd'];
                                            
    // Fim da validação
         
    $user_valido =     "
                        SELECT    *
                        FROM     login 
                        WHERE     log_user = '
    $username
                        AND      log_passwd = '"
    .md5('$password'.'$frase_um')"'";
                    
    ";
        
    $resultado = mysql_query($user_valido);
        
    $existe = mysql_fetch_array($resultado);
                                            // Verificação de existência
            if         (
    $existe['log_nivel'] == '1' && $existe['log_activo'] == '1')
                {
                    header("
    location:../administrador/administrator.php");
                }
            elseif    (
    $existe['log_nivel'] == '2' && $existe['log_activo'] == '1')
                {
                    header("
    location:../gabinete/gabinete.php");
                }
            elseif    (
    $existe['log_nivel'] == '3' && $existe['log_activo'] == '1')
                {
                    header("
    location:../colaborador/colaboradores.php");
                }            
            else
                {
                    header("
    location:../index.php");
                }
    ?>
     
  6. Demio

    Demio Power Member

    PHP:
    <?php session_start();
        include 
    '../ligar_a_bd.php';
        include 
    '../consultas_sql.php';
        
    $frase_um "aqui_fica_a_frase";
                                            
    // Inicio da Validação
                                            // Verificação de inserção de username
        
    if (isset($_POST['username'])) 
            
    $username $_POST['username'];
                                            
    // Verificação de inserção de password
        
    if (isset($_POST['passwd']))    
            
    $passwd $_POST['passwd'];
                                            
    // Fim da validação
         
    $user_valido =     "
                        SELECT    *
                        FROM     login 
                        WHERE     log_user = '
    $username
                        AND      log_passwd = '"
    .md5($password.$frase_um)."'";

        
    $resultado mysql_query($user_valido);
        
    $existe mysql_fetch_array($resultado);
                                            
    // Verificação de existência
            
    if         ($existe['log_nivel'] == '1' && $existe['log_activo'] == '1')
                {
                    
    header("location:../administrador/administrator.php");
                }
            elseif    (
    $existe['log_nivel'] == '2' && $existe['log_activo'] == '1')
                {
                    
    header("location:../gabinete/gabinete.php");
                }
            elseif    (
    $existe['log_nivel'] == '3' && $existe['log_activo'] == '1')
                {
                    
    header("location:../colaborador/colaboradores.php");
                }            
            else
                {
                    
    header("location:../index.php");
                }
    ?>
    Assim já deve funcionar.
     
  7. khaluh

    khaluh Power Member

    Não está a funcionar.

    Não tens nenhum exemplo que eu possa adaptar?
     
  8. p3dro

    p3dro Power Member

    PHP:
        if (isset($_POST['passwd']))    
            
    $passwd $_POST['passwd'];
                                            
    // Fim da validação
         
    $user_valido =     "
                        SELECT    *
                        FROM     login 
                        WHERE     log_user = '
    $username
                        AND      log_passwd = '"
    .md5($password.$frase_um)."'";
    tu tás a assignar à variável $passwd o valor do $_POST, porém depois na instrução sql estás a usar a variável $password "... md5($password.$frase_um) ..." e essa variável não existe (pelo menos no código que colocaste :)), tenta mudar o $password para $passwd e vê se funciona
     
  9. khaluh

    khaluh Power Member

    Viva

    Eu no código real tenho as 2 iguais, aí foi uma falha a passar o código...

    Eu agora estou a experimentar sem o md5 e funciona, manda para onde quero. Ou seja, concluo que ou estou a fazer mal quando guardo na BD ou quando faço a comparação.

    Código de guardar na BD:

    PHP:
    $frase_um "aqui_fica_a_frase";
        if (
    $opcao == 'Inserir')
        {            
                
    $nome $_POST['nome'];
                
    $username $_POST['username'];
                
    $passwd md5($_POST['passwd'] . $frase_um );
                
    $email $_POST['email'];    
                
    $nivel$_POST['nivel'];
                
    $activo $_POST['activo'];            
                
    // Adicionar um utilizador à BD
                
    $add_user "INSERT INTO login
                                    (
                                        log_nome, 
                                        log_user, 
                                        log_passwd,
                                        log_nivel,
                                        log_activo, 
                                        log_dataregisto, 
                                        log_email
                                    ) 
                            VALUES 
                                    (
                                        '
    $nome', 
                                        '
    $username', 
                                        '
    $passwd',
                                        '
    $nivel',  
                                        '
    $activo',
                                        NOW(),
                                        '
    $email'
                                    )"
    ;
                
    // executa a query
        
    $sql mysql_query($add_user)  
        or  die (
    "Não foi possivel inserir o utilizador.");    
            
    header ('location:administrator.php');
    Código de verificação de existência:
    PHP:
        $frase_um "aqui_fica_a_frase";
                                            
    // Inicio da Validação
                                            // Verificação de inserção de username
        
    if (isset($_POST['username'])) 
            
    $username $_POST['username'];
                                            
    // Verificação de inserção de password
        
    if (isset($_POST['passwd']))    
            
    $passwd $_POST['passwd'];
                                            
    // Fim da validação
         
    $user_valido =     "
                        SELECT    *
                        FROM     login 
                        WHERE     log_user = '
    $username
                        AND      log_passwd = '"
    .md5($passwd.$frase_um)."'";
        
    $resultado mysql_query($user_valido);
        
    $existe mysql_fetch_array($resultado);
                                            
    // Verificação de existência 
            
    if         ($existe['log_nivel'] == '0' && $existe['log_activo'] == 'Sim')
                {
                    
    header("location:../administrador/administrator.php");
                }
     
  10. p3dro

    p3dro Power Member


    desculpa lá a pergunta parva :P, mas no campo da tabela onde guardas a password (log_passwd) tens tamanho suficiente para guardar a informação gerado pelo md5? Para o md5 acho k têm de ter de length 32 ...
     
  11. khaluh

    khaluh Power Member

    Por acaso tenho definido como varchar 10 :007:, mas corrigi para 100 e já funciona...

    Afinal não era tão parva assim

    P3dro e Demio, obrigado
     
    Última edição: 30 de Junho de 2007

Partilhar esta Página