Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

diogocec

Problema com sistema de login

Recommended Posts

Bom dia, fiz um sistema simples de login, mas não consigo fazer a comparação de senha com o banco.

Utilizei MD5 para criptografar.

Criei dois usuários diferentes com a mesma senha e o hash gerado foi o mesmo dos dois (senha: 123, hash: 202cb962ac59075b964b07152d234b)

Se ao fazer o login for informado a senha 123, não será gerado o hash acima e feita a comparação com ele?

login.php

<?php
include 'funcoes.php';
connection();

	$login = $_POST['usuario'];
	$senha = md5($_POST['senha']);
	

		
	$query = mysql_query("SELECT username, senha FROM usuario WHERE username='$login' AND senha='$senha'") or die("erro ao selecionar");
	
	if(mysql_num_rows($query)>0){
		while($row = mysql_fetch_assoc($query)){
			echo "Conectado!";
		}
	}else{
		echo "Erro";
	}
?>

index.php

<!DOCTYPE html>
<html>
	<head>
    	<link rel="stylesheet" type="text/css" href="format.css" />
		<meta charset="UTF-8">
		<title>TESTE</title>
	</head>
	<body>
	
	<form action="login.php" method="POST">
	
	Usuário: <input type="text" id="usuario" name="usuario"/><br/>
	Senha: <input type="password" id="senha" name="senha"/><br/>
	
	<input type="submit" id="entrar" name="entrar" value="OK">
	</form>
	<a href="view_cadastroUsuario.php">Cadastrar</a>
	
	</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tire a senha do WHERE e selecione apenas por login. Em seguida exiba a senha vinda do banco. Vamos comparar com a gerada pelo usuário

 

Também faça:

 

var_dump($_POST);
var_dump($senha);

 

isso vai mostrar a senha digitada e o md5 gerado

note que um simples espaço muda tudo. O hash de "123" é diferente de hash de " 123"

 

 

 

PS: funções mysql_* estão obsoletas desde o PHP 5.5 e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim:

$query = mysql_query("SELECT username, senha FROM usuario WHERE username='$login' AND senha='$senha'") or die("erro ao selecionar");
	$contagem = mysql_num_rows($query);
	
	if ($contagem == 1) {
           echo "Conectado!";
           }
         }else{
           echo "Erro";
    }
?>

Não cheguei a testar, peguei de um exemplo meu aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, realmente, fiz o teste aqui que você falou e ele está enviando para fazer a comparação com o banco um hash semelhante mas não igual, conforme a imagem. Não sei pq ele está adicionando um 70 no final.

 

vsnyon.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

A senha digita como 123 realmente tem o seu hash com

202cb962ac59075b964b07152d234b70

Vá em seu banco de dados e altere a senha para esta acima e tente novamente. Acidentalmente você pode ter editado a senha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou menor, Verifica no banco de dados se você por um acaso não definiu o tipo de campo como VARCHAR 30. Com isso ele irá isolar os dois ultimos caracteres já que o hash é de 32bits. O correto seria CHAR 32.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alaerte Gabriel, foi exatamente isso que aconteceu, criei com 30 o que fez que com os dois últimos caracteres não fossem gravados. Aumentei para 40 e resolveu.

 

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.