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

PHP md5和sha1混淆-为什么我会得到不同的加密结果?,php,encryption,passwords,md5,sha1,Php,Encryption,Passwords,Md5,Sha1,我在php页面中有一个名为encrypt_password的php函数,我在处理注册表时使用该函数: function encrypt_password($password){ $salt = sha1(md5($password)); $password = md5($password.$salt); return $password; } 我尝试在处理登录表单时再次使用它,但得到的结果不同 我只是通过不调用此函数而只是调用以下函数来获得正确的结果: $salt

我在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);
直接在我的流程登录页面上。为什么调用encrypt_password会得到不同的结果

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

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

 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
函数加密密码($password){
$salt=sha1(md5($password));
$password=md5($password.$salt);
返回$password;
}
$myPassword=“test”;
echo encrypt_密码($myPassword);
//这给了我34364c859afb02e70306c905374ac2d5
$salt=sha1(md5($myPassword));
$password=md5($myPassword.$salt);
回声“
”; echo$密码; //这给了我34364c859afb02e70306c905374ac2d5

所以,它们是一样的。和Dimme一样,我对变量名也有同样的想法。但我无法复制这一点。对不起…

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

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

这里可能有很多错误,这取决于你如何发现它们不匹配。您是否只是尝试登录并看到密码错误?或者在调用
encrypt\u password
后是否回显密码哈希?如果能在注册页面和登录页面向我们展示密码“test”的散列,那就太好了。也许有人能看到一种模式

不管怎样,让我猜猜:

  • 您输入的密码不正确
  • 您已经创建了此用户,并使用较旧版本的加密功能对其进行了测试。也许你只使用了
    md5(密码)
    来注册,然后你读了一些不安全的地方并加了盐。现在比较同一密码的两个不同哈希,因为密码是使用旧的哈希函数存储在数据库中的
  • 您使用
    $password=$\u POST['password']设置
    $password
    我猜。我想这两页也是。这两页上的语句都没有打字错误吗?否
    $password=$\u POST['pasword']那里?这两个
    元素是否都命名为“password”
  • $encrypt_密码函数也会出现拼写错误。您是在两个页面上定义它,还是从另一个文件中包含它?(你应该这么做!)如果两个文件中都有,它们是否逐字匹配?复制粘贴它来测试这个,如果它有效,谢谢我,然后把它放在一个包含中,让它成为一个教训
  • 我也面临同样的问题。
    检查db中密码字段的长度哈希后的值增加到您在db中指定的限制

    我认为您不会这样做。你能再给我看一点代码吗?。。。也许您每次都应该为它提供相同的密码;)为什么不为所有的值显示一些示例,而不是争论呢?不管bug的来源是什么,您似乎通过哈希密码生成了一个“salt”。请注意,这不是salt,对攻击的抵抗力非常弱(这对使用预计算表的攻击是完全开放的,例如“彩虹表”,这正是真正的salt会阻止的,而您的not salt则不会)。此外,您的密码散列方案只使用了三个嵌套的散列调用,这是一个更大的弱点(这里应该有数千次,甚至数百万次的调用)。记住一件曾经发生在我身上的事。不知怎的,我在密码字段上传递了一个额外的空格。尝试回显您在表单中传递的变量。您不提供任何解决方案。除此之外,您的代码可能与user1050479的.LOL不完全相同。我复制了你的。。。你才是有这个问题的人,不是我。。。还是变暗