Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvidas Md5


siabreu

Pergunta

Olá pessoal,

Estou tentando utilizar a função md5 em um sistema de login e não está funcionando.

Fiz o insert into na tabela com o campo de senha usando o md5.

Só que na hora de verificar a senha do usuário, o script não encontra no banco.

O que está errado??

Trecho do código para autenticar o usuario


//recebe os dados do formulario
$usuario = $_POST[txtUser];
$senha = $_POST[txtSenha];

//verifica

$sql = mysql_query("SELECT A.ID_USUARIO, A.NOME_USUARIO FROM tb_usuarios A WHERE A.USUARIO = '$usuario' AND A.SENHA = md5('$senha')")
or die("erro no comando sql");

trecho do código para incluir o usuário no banco

mysql_query("INSERT INTO tb_usuarios(nome_usuario,usuario,senha,email) VALUES ('$nome', '$usuario', md5('$senha'),'$email')") or die ("erro de sql: ".mysql_error());

[code]

O que está errado?? Alguém pode me ajudar?

Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

  • 0

Tenta assim:

//recebe os dados do formulario

$usuario = $_POST['txtUser'];

$senha = $_POST['txtSenha'];

$new_senha = md5($senha);

//verifica

$sql = mysql_query("SELECT A.ID_USUARIO, A.NOME_USUARIO FROM tb_usuarios A WHERE A.USUARIO = '$usuario' AND A.SENHA = '$new_senha'")

or die("erro no comando sql");

E para inserir no mesmo esquema !! Colocando fora da query SQL !!

Link para o comentário
Compartilhar em outros sites

  • 0

Como o Illidan falo é serve para encryptografar uma string !

isso serve mais para senhas, pois uma vez alguém *putz desculpa mais esqueci quem* falo para mim uma coisa que nunca vou esquecer..

"ao me cadastrar no seu site tenho que confiar a voce minha senha, ou seja voce tambem não pode ve-la !"

wink.gif

md5 é rox...

olha vo fala a coisa que eu demorei para conseguir consertar !

eu puis para adicionar na database o registro com md5... ok, e na hora de verificar tambem usei md5 ok. eu fiz tudo certo... mais sempre dava erro que o usuario e senha não conferem .. nossa cara vo te falar fiquei muito tempo para descobrir !

mais com o tempo vi que é uma coisa ridicula mais que muita gente erra ! o que estava errado é, ao encryptografar pelo md5 ele gera uma string de 32 numeros (palavras do Illidan) ok , so que na database eu tinha posto varchar(25) HAWhahwha tongue.gif

So um toque para quem errar na mesma coisa tongue.gif

[]´s

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Jeison Souza

Só não concordo que o MD5 não dá para desencripitar. Eu tenho um DB que está gravado informações de usuario e senha utilizando MD5 na senha, e uma parte do código do "Esqueceu sua senha", que envia as informações por e-mail, mostra que é possivel enviar a senha por e-mail descriptada, não sei como, pois não fiz nenhuma alteração na variavel "pass", e ao envia-la por e-mail, chega sem a encriptação... Se abrir a tabela no MySql, não dá para ver a senha, mas porque por e-mail é possivel desvenda-la ??? huh.gif


$query = mysql_query("select username, email, pass, login_code from Auth_users where username='nomedousuario' limit 1");

$count = mysql_num_rows($query);
if($count == 1)
{
$userinfo = mysql_fetch_array($query);
$msg = "Olá $userinfo[username],

Alguém solicitou o envio das informações de sua conta para este endereço de e-mail:

Usuário: $userinfo[username]
Senha:   $userinfo[pass]
Código de Acesso: $userinfo[login_code]

para registrar, vá para $site[url]

Se você não solicitou esta informação, favor ignore este e-mail.";

$mail = mail("$userinfo[email]", "Informações da Sua Conta","$msg", "From: WebAdmin");
$email = str_replace("@","[at]",$userinfo[email]);
$where = strpos("$userinfo[email]","@");
$email = substr("$userinfo[email]", 0,$where);
print("<BR><b class=\"texto\">$userinfo[username],</b><BR><BR><p class=\"texto\">As Informações de sua Conta foram enviadas para <BR><b><i>$email@</i>...</b><p>");
}

Abraços, Jeison Souza

Link para o comentário
Compartilhar em outros sites

  • 0

Eu sempre ouvi dizer que md5 é um "caminho sem volta", que nem o criador desse método pode desencriptar. Bom, esse código que você passou não desencripta! Só puxa o que está no banco de dados e manda um e-mail. Ou seja, se a senha estiver encriptada no mysql, ele vai mandá-la encriptada, mesmo!

Tem certeza de que ela está encriptada no db? Se for o caso, posta mais alguma parte do código... inclusive a parte que acrescenta um novo usuário, ok?

Até mais! Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Illidan,

Vamos lá, pensa comigo:

Se uma string que passa pelo md5 mais de uma vez retorna um mesmo valor em todas as vezes que passa, o processo é um só, concorda ?

Exemplo:

Se eu fizer:

echo md5("a");

E depois fizer de novo:

echo md5("a");

É porque as strrings passadas por parâmetro, são submetidas a um mesmo processo que não usa de funções de Randomização, como rand()

E, sendo um mesmo processo, no estudo dele pode se reverter o mesmo, concorda ??

Entaum, num é um caminho sem volta !!

Apenas não foi divulgado a volta (por que alguém já deve ter descuberto) ...

Link para o comentário
Compartilhar em outros sites

  • 0

Pedro,

Seu raciocínio tem lógica. Concordo que o processo é um só e que ele não usa nada randômico, como a função rand(), pois a mesma string que passa várias vezes pelo md5 retorna sempre o mesmo valor. Mas ainda acho que é possível criar um meio de você criptografar uma string num caminho "sem volta".

Vou mostrar um exemplo banal. O cálculo:

18 % 5 = 3

Mas do 3 você não consegue voltar no 18. Pois, por exemplo, 23 % 5 tb dá 3, assim como 28 % 5, etc..

Vou tentar montar uma criptografia que gera sempre o mesmo valor a partir de uma string, mas que não dá pra você voltar no valor original.

Até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

entaum peralá!!! esse sistema de md5 gera qulquer senha com 32 char?? ou 1 char passa a ser 32 char??? entendeu??

a = mnajslerotmnajslerotmnajslerotça; // (32)
abc = mnajslerotmnajslerotmnajslerotçamnajslerotmnajslerotmnajslerotçamnajslerotmnajslerotmnajslerotça;

??

isso mesmo???

entaum é uma criptografia de 32 bits.. sendo assim.. não fica muito dificil de desncriptar.. mas isso é outra história... o que acontece entaum... se eu cadastro com md5 tenho que ler com md5???? e qlqr que seja o tipo do campo é sempre bom deixar com amsi de 50 entaum??

Link para o comentário
Compartilhar em outros sites

  • 0

ffiction,

O md5 sempre retorna uma string com 32 caracteres, independente do tamanho da string original (pode ser até uma string vazia).

Pedro,

Eu montei um esquema de criptografia "sem volta". É bem simples, só retorna 4 caracteres... mas pelo menos taí uma forma de como isso é possível.

Falou!

<?php

function hash($string) {

    $tamanho = strlen($string);

    // Coloca cada caractere da string original num array chamado $str

    for ($x = 0; $x < $tamanho; $x++) { $str[$x] = substr($string, $x, 1); }

    // Cria um array chamado $asc com todos os caracteres possíveis (0-9, A-Z, a-z), com 62 índices no total (0-61)

    for ($i = 0, $x = 97; $x <= 122; $x++, $i++) { $asc[$i] = chr($x); }

    for ($x = 48; $x <= 57; $x++, $i++) { $asc[$i] = chr($x); }

    for ($x = 65; $x <= 90; $x++, $i++) { $asc[$i] = chr($x); }

    // A varável $x é calculada de forma que não se possa desfazer o cálculo (assumirá um valor entre 0 e 3)

    if ($tamanho <= 3) {

        $x = $tamanho;

    } else {

        $x = $tamanho % 4;

    }

    // A varável $y é calculada de forma que não se possa desfazer o cálculo (assumirá um valor maior que 1)

    if ($tamanho > 0) {

        $y = ceil((ord($str[0]) + 2) / 2);

    } else {

        $y = 1;

    }

    // NÃO É POSSÍVEL DESCOBRIR OS VALORES QUE ORIGINARAM AS VARIÁVEIS $x e $y

    // PORTANTO, O HASH SERÁ CRIADO A PARTIR DE CÁLCULOS COM ESSAS VARIÁVEIS

    $z = isset($str[0]) ? $x + ord(end($str)) : $x + $y;

    while ($z > 61) { $z -= 62; }

    $hash[0] = $asc[$z];

    $z = isset($str[1]) ? ($str[1] * floor(exp($x))) : (($y + 155) * floor(exp($x)));

    while ($z > 61) { $z -= 62; }

    $hash[1] = $asc[$z];

    $z = isset($str[2]) ? pow(ord($str[2]), $x) : pow($y, $x) + 15;

    while ($z > 61) { $z -= 62; }

    $hash[2] = $asc[$z];

    $z = isset($str[3]) ? $y * ord($str[3]) : $y * ord($hash[2]);

    while ($z > 61) { $z -= 62; }

    $hash[3] = $asc[$z];

    $hash_final = NULL;

    foreach ($hash as $hash) { $hash_final .= $hash; }

    return $hash_final;

}

echo hash("abcde");

?>

Link para o comentário
Compartilhar em outros sites

  • 0

Mas aih que tah ...

Ela não é impossível de desfazer !!

Mas em programas para hackear, ele testa as possibilidades oriundas da "descriptografia" !

Ou seja, a descriptografia hj em dia, serve mais para "diminuir o nº de possibilidades" !! Acredito que o md5 esteja dentro desse padrão, como você fez a sua criptografação !!

Agora, você diminuir de 1.000.000 para 4 possibilidades, já é um ENORME passo ...

Entendeu agora !?

E como a criptografia, no caso de senhas, serve basicamente para segurança, o aconselhável é tomar outras precauções além da criptografia !

Link para o comentário
Compartilhar em outros sites

  • 0

Então aí sim... é diferente você dizer que uma string criptografada pode ser descriptografada, e você dizer que um programa pode gerar uma lista de possibilidades pra uma string criptografada. Aí eu concordo com você...

O que gerou essa discussão foi que o Jeison Souza disse que o script dele desfazia o md5... aí eu acho meio difícil (voltar exatamente na string original). Até poderia haver um script que fizesse a lógica reversa, mas se o md5 trabalhar como eu estou imaginando, ele no máximo conseguiria uma lista das senhas que gerariam aquele hash, nunca a senha exata.

Mas beleza... você disse que é importante tomar outras precauções além da criptografia... quais seriam elas? você pode citar algumas?

Link para o comentário
Compartilhar em outros sites

  • 0

Exemplo:

Não passar por um só algoritmo de encriptação !

Não permitir senhas pequenas ou só numéricas/alfabéticas !

Mas além de tudo, se possível, utilizar sempre um algoritmo próprio de encriptação ! Pois é mais difícil de descobrir a sua lógica !

Existem outras coisas !! Eu não entendo muito de segurança na programação !!

Mas devemos estar sempre atentos ao programar para evitar falhas que possam permitir a entrada no sistema !!

Evitando, por exemplo, o SQL Injection, entre outras formas "conhecidas" de invadir sistemas !!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...