gpt4 book ai didi

php - 使用相同的盐、密码和河豚返回不同结果的 crypt 函数

转载 作者:行者123 更新时间:2023-11-30 23:28:02 24 4
gpt4 key购买 nike

我已经开始着手制作登录系统并使用 crypt 函数对密码进行编码。我的问题是,当我用那里的用户名和密码注册用户时,一切正常,并将用户名密码和盐保存到数据库中。这是注册代码:

注意:目前这只是一个测试注册页面

$username=$_POST["username"];
$password=$_POST["password"];


$salt = substr(md5(microtime()),rand(0,26),15);
$hashedPass = crypt($password,'$2y$10$' . $salt);


$sql="INSERT INTO `users`(`id`, `username`, `password`, `salt`, `Perm_level`) VALUES (NULL,'$username','$hashedPass','$salt','test')";
$result=mysql_query($sql);

它正确地加密了所以一个真实的例子是密码测试结果如下:$2y$10$d395985a2ca993f$$$$$.k8lxPkUCenMKsOJ6V8tdO6Pl/Gl1/OW

它的盐用于:
d395985a2ca993f

当我登录时,虽然我从数据库中提取盐并尝试以相同的方式重新加密它,但我得到了一个不同的加密密码......盐是正确的,密码的第一部分也是正确的所以这部分“$2y$10$d395985a2ca993f$$$$$$。”

登录代码如下:

$sql="SELECT * FROM `users` WHERE username='$user'";
$result=mysql_query($sql);

while($rows=mysql_fetch_array($result)){
$salt=$rows['salt'];
}

$hashedPass = crypt($password,'$2y$10$' . $salt);

$sql="SELECT * FROM `users`WHERE username='$user' AND `password` = '$hashedPass'";
$result=mysql_query($sql);

if($result) {
if(mysql_num_rows($result) == 1) {
echo "Successful Login";

}
}

对于登录页面,salt 是正确的,但这里是经过哈希处理后的密码:$2y$10$d395985a2ca993f$$$$$.ccy3PKl.TsG26FWJBFXKmpQ3wtk4AqC

直到句号的第一部分是正确的,只是下半部分不同

我已经尝试将 salt 设置为手动值,例如 abc 或 123 只是为了在登录和注册页面上进行测试,但我仍然遇到相同的错误

最佳答案

从您的代码中我看到您使用河豚哈希。

当使用 blowfish hashing 时,你的 salt 需要被 base64 编码并且之后,您必须用点替换“+”。

你的盐应该是 22 个字符长。

此外,最佳实践是使用 PHP 散列包,例如这个 http://www.openwall.com/phpass/

很少有人能编写出正确的散列函数。它需要非常先进和专业的知识。

关于php - 使用相同的盐、密码和河豚返回不同结果的 crypt 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12169176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com