2011-11-20 70 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"; 
} 
相關問題