PHP md5和sha1混淆 - 为什么我得到不同的加密结果?

时间:2011-11-16 23:48:49

标签: php encryption passwords md5 sha1

我在处理注册表单时使用的名为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获得不同的结果?

我希望我已经足够清楚地解释了这一点! 谢谢!

3 个答案:

答案 0 :(得分:0)

我简直不敢相信这是真的。你说你有两个页面,一个有注册表,另一个有登录表。

他们都必须加密用户发布的密码。

这里可能存在许多错误,具体取决于您发现它们不匹配的方式。您是否只是尝试登录并查看密码错误的错误?或者,在调用encrypt_password后,您是否回显了密码哈希?从注册页面和登录页面向我们展示密码“test”的哈希值会很高兴。也许有人可以看到一种模式。

无论如何,让我猜一下:

  1. 您输入的密码不正确。
  2. 您已使用较旧版本的加密功能创建了此测试用户。也许您只使用md5(password)进行注册,然后您阅读某个不安全的地方并添加了盐。现在,您要为相同的密码比较两个不同的哈希,因为密码使用旧的哈希函数存储在数据库中。
  3. 我猜$password $password = $_POST['password'];。在这两个页面上,我猜也是。这两个页面上的陈述是否都是无拼写的?那里没有$password = $_POST['pasword'];?这两个<input>元素都是“密码”吗?
  4. Typos也可以使用$ encrypt_password函数。您是在两个页面上定义它,还是从其他文件中包含它? (你应该!)如果它们存在于两个文件中,它们是否一个字母一致?用它来测试它,如果它有效,谢谢我,然后把它放在一个包含中,让它成为一个教训。

答案 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一样,我对变量名称也有同感。但我无法复制这个。遗憾...