嘿,伙计,我在试着做一个使用MD5加密密码的登录系统。我有加密工作,它只是出于某些原因,当我输入密码"palmer“到登录页面,并点击登录按钮,我让它把我发送到一个页面,它告诉我加密的密码,并使用"palmer”作为密码,它输出这个"Duncan登录使用密码4844fd4088ef5278ad18f892808ebda8 - palmer“。加密后数据库中的THe密码为"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');
//}
?>发布于 2011-08-15 17:15:39
你必须存储你的盐-请使用一个随机的盐,这样两个拥有相同密码的用户将得到一个不同的摘要!-在某个地方供以后使用:
$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';
}发布于 2011-08-15 17:19:24
为此,您真的应该使用bcrypt。在之前的堆栈溢出后的How do you use bcrypt for hashing passwords in PHP?上有更多关于bcrypt的内容
bcrypt被认为是使用salt实现密码散列的最安全的方法,因为它速度很慢-比MD5慢得多。
发布于 2013-05-12 23:36:27
只需对上面的knittl的解决方案做一点小小的评论:
你需要替换这行
if($stored_pw = sha1($user_provided_pw.$stored_salt)) {通过
if($stored_pw == sha1($user_provided_pw.$stored_salt)) {才能让它工作。
(我试着将它添加到knittl的帖子中,但它说编辑需要至少6个字符)
https://stackoverflow.com/questions/7063205
复制相似问题