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


PHP md5 and sha1 confusion - Why am I getting different encryption results?

我在php页面中有一个名为encrypt_password的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得到不同的结果?

我希望我已经解释得足够清楚了!谢谢!

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

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

这里可能有很多错误,这取决于你如何发现它们不匹配。你只是试图登录,看到一个错误,你的密码是错误的?还是你在呼叫encrypt_password后回显了密码哈希值?如果能从注册页面和登录页面向我们展示密码"test"的散列,那就太好了。也许有人能看出其中的规律。

不管怎样,让我猜猜:

  1. 密码输入错误
  2. 您已经创建了此用户,您正在使用旧版本的加密功能进行测试。也许您只使用md5(password)来注册,然后您在某个地方读到不安全并添加了盐。现在您将比较同一个密码的两个不同的哈希值,因为密码是使用旧的哈希函数存储在数据库中的。
  3. 你设置$password$password = $_POST['password'];我猜。我猜两页都有。两页上的语句都没有打印错误吗?没有$password = $_POST['pasword'];吗?两个<input>元素都命名为"密码"吗?
  4. $encrypt_password函数也会出现错字。您是在两个页面上定义它,还是从另一个文件中包含它?(你应该!)如果它们在两个文件中都存在,它们是否逐个字母匹配?复制它来测试一下,如果它工作,谢谢我,然后把它放在一个包含,让它成为一个教训。

我也面临同样的问题。检查db中密码字段的长度,哈希后的值增加到db

中指定的限制。

是的,我检查了代码,没有错误。这是我的代码没有任何缺陷:

 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一样,我对变量名也有同样的想法。但我无法复制这一点。对不起…