2011-11-20 71 views
1

这实际上是两个问题:使用crypt和验证 - 不知道它是如何工作的?

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

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

2)一旦我得到这些数据,我如何在未来的日期根据用户输入验证它?以下看起来不起作用:

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

我在这里错过了什么?

回答

2

当你使用crypt时,Salt(someStringThatIs33CharsLong)需要相同才能加密别的东西并且其值相同。其中,密码被调用

crypt('password', 'aCrt45xaCrt45xaCrt45xaCrt45xaCrt4'); 

当您重新加密,您将需要使用相同的盐,以确保它是一样的我已经使用这个用户名/密码登录。这可以通过存储在数据库中或静态地完成。

你的支票会变成

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

存储,你将需要把$encryptedinfo在一个XML页面,SQL数据库,或$_COOKIE['encryptedinfo'](我不建议的最后一个,或者第一个)

0

您应该使用:

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

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

希望这会有所帮助!

0

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

鉴于$encryptedinfo使用之前创建:

$encryptedinfo = crypt(...); 

,那么你已经显示了验证密码的方法是正确的。例如,以下脚本打印"Password verified!"

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