Php 使用salt解密密码

Php 使用salt解密密码,php,salt,password-encryption,Php,Salt,Password Encryption,这里的代码是加密密码,但我如何解密它或将其与laravel中的登录进行比较 代码在哪里使用 getsql(md5($_POST['regpassword'] . SALT), "default"), md5是散列,它是不可逆的。您无法解密它。您只能使用相同的算法和salt对密码进行散列,然后比较结果以确保它是正确的密码。验证密码时,您可以执行以下操作: $hashed = md5($_POST['password'] . SALT); $sql = "SELECT * FROM user

这里的代码是加密密码,但我如何解密它或将其与laravel中的登录进行比较

代码在哪里使用

   getsql(md5($_POST['regpassword'] . SALT), "default"),

md5是散列,它是不可逆的。您无法解密它。您只能使用相同的算法和salt对密码进行散列,然后比较结果以确保它是正确的密码。验证密码时,您可以执行以下操作:

$hashed = md5($_POST['password'] . SALT);
$sql = "SELECT * FROM users WHERE username = '{$_POST['username']}' AND password = '$hashed'";
我已经对此进行了简化,以展示如何检查密码的重要部分,实际上,您应该使用一个准备好的语句来防止SQL注入

另一种方法是从数据库中获取哈希密码,然后将其与给定的哈希+加盐密码进行比较:

$hashed = md5($_POST['password'] . SALT);
$sql = "SELECT password FROM users WHERE username = '{$_POST['username']}'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
if ($row && $hashed == $row['password']) {
    // user is validated
}

如果您将存储密码的方法修改为使用比静态SALT更合理的方法,那么第二种方法很容易更新。不要使用$hashed==$row['password'],而是使用password\u verify$\u POST['password'],$row['password']。

不要使用MD5作为密码。使用密码散列和密码验证。它们自动进行盐分。盐分是常量吗?将salt添加到密码中的整个要点是,它应该随机生成,每个用户都不同;但是就像我说的,把salt作为一个常数是没有意义的。如果你需要别人的代码帮助,请联系代码的作者。同时,md5是一种不安全的哈希算法,不能用于哈希密码。因为它是一个散列,所以它不能被逆转。首选算法为bcrypt和argon2id,如果可用,则后者为首选算法。tryied md5'Kareem9987'。SALT我得到错误使用未定义的常量SALT-假设“SALT”这将在phpy的未来版本中引发错误您必须定义SALT正如我上面所说的,您需要定义SALT。使用未定义的常量SALT-假设“SALT”这将在phpy的未来版本中引发错误您需要对加密和验证执行相同的操作。我记得你说过加密是有效的。这不是一个好建议,因为它只适用于静态salt,这违背了salt的目的。相反,应该只按用户搜索,然后用PHP验证哈希值,如图所示。@martinstoeckli很好的建议,我已经展示了另一种样式