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

时间:2011-11-20 03:25:55

标签: php encryption blowfish

这实际上是两个问题:

1)我的理解是你确定加密crypt()的类型使用盐中使用的字符数。例如:

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

2)获得此数据后,如何在未来日期对用户输入进行验证?以下似乎不起作用:

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

我在这里缺少什么?

4 个答案:

答案 0 :(得分:2)

当您使用crypt时,Salt(someStringThatIs33CharsLong)需要相同才能加密其他内容并使其值相同。我已将此用于用户名/密码登录,其中使用

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

当您重新加密时,您需要使用相同的盐来确保它是相同的。这可以通过存储在数据库中或静态地完成。

所以你的支票会变成

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您应该使用:

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

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

希望这有帮助!

答案 3 :(得分:0)

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";
}