MD5盐登录系统

时间:2011-08-15 08:59:35

标签: php login system md5

嘿家伙我正在尝试建立一个使用MD5加密密码的登录系统。我有加密工作,所有这只是出于某种原因,当我在登录页面输入密码“palmer”并点击登录按钮我发送给我一个页面,它告诉我加密密码和使用“palmer”作为它输出的密码“Duncan使用密码登录4844fd4088ef5278ad18f892808ebda8 - palmer”。加密时数据库中的密码是“4669a6b46c8d891b373cfcd664dff6”。为什么两个密码不同?我使用相同的盐(盐是“a123b123”。

下面是我的代码,用于加密注册码上的密码:

$password = $_POST['password'];

$md5pass = md5($salt.md5($password));

以下是我的登录代码。

<?php
session_start();
include('config/config.php');

$email = $_POST['email'];
$password = $_POST['password'];
$pass2 = md5($salt.md5($password));

$check = mysql_query("SELECT `email`,`password` FROM user WHERE (`email`='$email' AND       `password`='$pass2')") or die(mysql_error());

$count = mysql_num_rows($check);

//if($count == 1) {
$_SESSION['user'] = strtoupper($user);
//header('Location: /panel/index.php');
echo("Duncan Logged in using password $pass2 - $pass");
//} else {
//$_SESSION['errormsg'] = "<div id='error'><strong>Error:</strong> Invalid Username or Password!</div>";
//header('Location: index.php');
//}
?>

3 个答案:

答案 0 :(得分:7)

你必须存储你的盐 - 并且请使用随机盐,这样两个拥有相同密码的用户将获得不同的摘要! - 某处供以后使用:

$salt = sha1(getRandomSalt());
$digest = sha1($password.$salt).'$'.$salt; // use sha1 instead of md5

稍后您可以使用相同的盐检查提供的密码:

list($stored_pw, $stored_salt) = explode('$', $stored_digest);
if($stored_pw == sha1($user_provided_pw.$stored_salt)) {
  echo 'user provided correct password';
}

答案 1 :(得分:3)

你应该真的使用bcrypt。之前Stack Overflow帖子How do you use bcrypt for hashing passwords in PHP?

上的bcrypt上有更多内容

bcrypt被认为是使用salt实现密码哈希的最安全方式,因为它很慢 - 比MD5慢得多。

答案 2 :(得分:2)

对knittl上面的解决方案做一点评论:

您需要替换

if($stored_pw = sha1($user_provided_pw.$stored_salt)) {

通过

if($stored_pw == sha1($user_provided_pw.$stored_salt)) {

让它运作起来。

(我试图将它添加到knittl的帖子中,但它说编辑需要至少6个字符)