这实际上是两个问题:
1)我的理解是你确定加密crypt()
的类型使用盐中使用的字符数。例如:
crypt('mypassword', someStringThatIs33CharsLong); // This would be blowfish?
2)获得此数据后,如何在未来日期对用户输入进行验证?以下似乎不起作用:
if (crypt($user_input, $encryptedinfo) == $encryptedinfo) {
echo "Password verified!";
}
我在这里缺少什么?
答案 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";
}