使用crypt,并验证-不确定它是如何工作的


Using crypt, and verifying - not sure how it works?

这实际上是两个问题:

1)我的理解是,你通过在盐中使用多少字符来确定crypt()使用哪种类型的加密。例如:

crypt('mypassword', someStringThatIs33CharsLong); // This would be blowfish?

2)一旦我得到这个数据,我如何在未来的日期根据用户输入验证它?下面的代码似乎不工作:

if (crypt($user_input, $encryptedinfo) == $encryptedinfo) {
   echo "Password verified!";
}

我在这里错过了什么?

当您使用加密时,Salt (someStringThatIs33CharsLong)需要相同,以便您加密其他内容并具有相同的值。我已经将此用于用户名/密码登录,其中密码使用

调用
crypt('password', 'aCrt45xaCrt45xaCrt45xaCrt45xaCrt4');

当你加密时,你需要使用相同的盐来确保它是相同的。这可以通过在数据库中存储或静态存储来实现。

所以你的支票会变成

if (crypt($user_input, someStringThatIs33CharsLong) == $encryptedinfo) {
   echo "Password verified!";
}

要存储,您需要将$encryptedinfo放在xml页面,sql数据库或$_COOKIE['encryptedinfo']中(我不建议最后一个或第一个)

你应该使用:

<?php
$crypt_pass = crypt('mypassword', 'salt');
?>

<?php
if(crypt('mypassword', 'salt') == $crypt_pass){
    echo 'Correct Pass';
}
?>

希望这对你有帮助!

PHP的crypt()确实使用salt参数来确定使用哪种算法,但它不是参数的长度-而是格式。例如,通过以$2a$12$...格式给出盐来选择Blowfish,其中...是22个字符的盐。

假定$encryptedinfo是在前面使用:

创建的
$encryptedinfo = crypt(...);

则您所展示的验证密码的方法是正确的。例如,下面的脚本打印"Password verified!":

$encryptedinfo = crypt('mypassword', '$2a$12$t4cmBQx3na8EAeNuWLwiN1');
if (crypt('mypassword', $encryptedinfo) == $encryptedinfo) {
   echo "Password verified!'n";
}