Login com md5 problem

DarkWolfXP

Power Member
Bem é o seguinte eu fiz uma pagina para fazer check do formulario da pagina "login.php"
o registro foi feito e a password foi encriptada com md5(); o problema k eu agr tenho e associar os dois, isto é, encriptar o $pass k é igual ao pass (nome do formulario da password) e dps associar na base de dados

este script explica td... (é da pagina de check_login.php)
<?
include "configuration.php";

$db = mysql_connect($host, $login_php, $password);
$basedados = mysql_select_db($database);
$pass_encrypted = md5($pass);
$check = mysql_query("SELECT * FROM `$table` WHERE login = '$login' AND pass = '$pass_encrypted'", $db);
$count = mysql_num_rows($check);

if ( $count == 1 ) {
setcookie ("login", $login);
setcookie ("pass", $pass_encrypted);
echo "Welcome User";
} else {
echo "Login ou senha inválidos.<a href=javascript:history.go(-1)>Clique aqui para voltar.</a>";
}
?>
O k é k esta mau? como poderei encriptar e dps comparar?
Com este script obtenho login ou senha invalidos , entao experimentei meter nesse script echo "$pass_encrypted"; e demonstra a password encriptada e igual á da base de dados.(é igual pois a password k submeti no formulario é igual ao da base de dados)
Agr n percebo pk é k ele n compara... isto é compara com $pass_encrypted ao pass do base de dados...
Plz alguem me ajude :(
 
Eu não sei programar em PHP, mas a construção da string do select parece-me muito estranha.

Parece-me estares a comparar o login com a string '$login' e não com o valor da variável.
 
Mas

Mas essa script
Ir a table no lugar de login = $login (ver se estao iguais caso n estejam esta script vai dar zero como iremos ver a seguir)
e tb no lugar da pass = $pass_encrypted (para ver se no lugar da pass é igual ou nao da pass encriptada)
dps deste expressao uso o count para ver se isto ta correcto ou n se der 0 n esta se der 1 esta.
o meu problema e ke com pass_encrypted isto dá me zero e se for com pass (e meter a password encryptada do registro [vou ao phpmyadmin copio de la]) e meto no login e isto dá me um! (ker dizer entrou)
So com md5 e k n me esta dar... alguem me pode ajudar -..-
 
boas,

fiz um script de login à pouco tempo que tb usa md5 e funciona 5*, por isso so vejo uma coisa que possa estar mal:

a pass na base de dados esta encriptada ou está normal? Tem de estar encriptada para funcionar...

EDIT: Já agora, as variaveis estão a passar para esse script? é que dependendo dos servidores em vez de $pass e $login, tens de usar $_POST['pass'] e $_POST['login'].

;)
 
Última edição:
Foi facil!

a pass tava encriptada
andei a ler k md5 encriptada X caracters e eu no phpmyadmin na parte da pass tinha 50 e tava kortar uns caracteres!!!! Por isso ele tinha razao n eram iguais um tinha menos caracteres ke outro mudei o valor para 60 e ja ta bombar ^^
ouvi dizer k encriptaçao md5 e ouco segura andei ver k Sha256 e mt boa como funciona com ela? é da mm forma k o md5?
e o sha1 e seguro?
 
DarkWolfXP disse:
Mas essa script
Ir a table no lugar de login = $login (ver se estao iguais caso n estejam esta script vai dar zero como iremos ver a seguir)
e tb no lugar da pass = $pass_encrypted (para ver se no lugar da pass é igual ou nao da pass encriptada)
dps deste expressao uso o count para ver se isto ta correcto ou n se der 0 n esta se der 1 esta.
o meu problema e ke com pass_encrypted isto dá me zero e se for com pass (e meter a password encryptada do registro [vou ao phpmyadmin copio de la]) e meto no login e isto dá me um! (ker dizer entrou)
So com md5 e k n me esta dar... alguem me pode ajudar -..-

Exacto, o meu post anterior tem a resposta.

Pesquisei mais um bocado e pelo que vi o operador de concatenação de strings no PHP é o "." (Posso estar redondamente enganado).

ou seja:

Em vez disto:

Código:
$check = mysql_query("SELECT * FROM `$table` WHERE login = '$login' AND pass = '$pass_encrypted'", $db);

metes isto:

Código:
$check = mysql_query("SELECT * FROM `$table` WHERE login = '" . $login . "' AND pass = '" . $pass_encrypted . "'", $db);

No entanto, tens de ter cuidado que desta maneira é possível um ataque por SQL injection...
Tens de explorar melhor pela solução.
 
DarkWolfXP disse:
ouvi dizer k encriptaçao md5 e ouco segura andei ver k Sha256 e mt boa como funciona com ela? é da mm forma k o md5?
e o sha1 e seguro?

Primeiro tens de entender do que estás a falar. MD5 e SHA não são enciptações e sim hash algorithms.

Dado um conjunto x de dados, ambos produzem uma versão "condensada" não reversivél.

O problema da segurança tem a ver com o facto de que, não sendo reversivél, podem exitir colisões.

Imagina o caso simplista em que o algoritmo fosse username*password e tudo numeros:

HASH=L*P

para L/P 1/20, 2/10/, 4/5, 5/4, 10/2 e 20/1 HASH era sempre igual. Tinhas 6 casos de username/password identicos e não podias decidir quem era quem.

Obviamente, tanto MD5 como os SHA são muito mais complexos, logo, não tens colisões ao pacote. Mas existem.

Aliás, a premissa dos hash algoritms, para message digests, não é a de não conseguires colisões, e sim de ser "caro" em termos de cpu conseguir a colisão com um conteudo x decidido por ti.

De qqr modo, preocupa-te mais com, como referiram, SQL injection do que com o login. Se não te preocupas, é mais fácil aceder á base de dados e sacar as coisinhas todas do que andar a adivinhar usernames/passwords.
 
Back
Topo