我在处理注册表单时使用的名为encrypt_password的php页面中有一个php函数:
function encrypt_password($password){
$salt = sha1(md5($password));
$password = md5($password.$salt);
return $password;
}
我在处理登录表单时尝试再次使用它,但我得到了不同的结果。
我只是通过不调用此函数而只是调用:
来获得正确的结果$salt = sha1(md5($password));
$password = md5($password.$salt);
直接在我的process_login页面上。为什么我会通过调用encrypt_password获得不同的结果?
我希望我已经足够清楚地解释了这一点! 谢谢!
答案 0 :(得分:0)
我简直不敢相信这是真的。你说你有两个页面,一个有注册表,另一个有登录表。
他们都必须加密用户发布的密码。
这里可能存在许多错误,具体取决于您发现它们不匹配的方式。您是否只是尝试登录并查看密码错误的错误?或者,在调用encrypt_password
后,您是否回显了密码哈希?从注册页面和登录页面向我们展示密码“test”的哈希值会很高兴。也许有人可以看到一种模式。
无论如何,让我猜一下:
md5(password)
进行注册,然后您阅读某个不安全的地方并添加了盐。现在,您要为相同的密码比较两个不同的哈希,因为密码使用旧的哈希函数存储在数据库中。 $password
$password = $_POST['password'];
。在这两个页面上,我猜也是。这两个页面上的陈述是否都是无拼写的?那里没有$password = $_POST['pasword'];
?这两个<input>
元素都是“密码”吗?答案 1 :(得分:0)
我遇到了同样的问题。 检查db中密码字段的长度,散列后的值增加了你在db
中指定的限制答案 2 :(得分:-2)
是的,我查了代码,而且没有错误。这是我的代码没有任何缺陷:
function encrypt_password($password){
$salt = sha1(md5($password));
$password = md5($password.$salt);
return $password;
}
$myPassword = "test";
echo encrypt_password($myPassword );
// this gives me 34364c859afb02e70306c905374ac2d5
$salt = sha1(md5($myPassword));
$password = md5($myPassword.$salt);
echo "<br />";
echo $password;
//this gives me 34364c859afb02e70306c905374ac2d5
所以,他们是一样的。像Dimme一样,我对变量名称也有同感。但我无法复制这个。遗憾...