2012-09-02 67 views
0

我正在閱讀保護密碼,並希望得到我的代碼是否正確的反饋。我正在嘗試使用blowfish和crypt()一起來防止任何人解密密碼。另外,我有一個問題。當我存儲密碼時,我想我還必須存儲變量$string,以便我可以再次使用它來驗證用戶登錄時是否正確?河豚和地穴成功的例子?

function unique_md5() { 
    mt_srand(microtime(true)*100000 + memory_get_usage(true)); 
    return md5(uniqid(mt_rand(), true)); 
} 

//unique_md5 returns a random 16 character string 

$string = '$2a$07$' . unique_md5(); 

$password = 'password'; 

$password = trim($password); 

$protected_password = crypt($password, $string); 

//then store the variables $string and $protected_password into the database 
+0

http://www.chilkatsoft.com/p/php_blowfish.asp - Google –

+0

'$ cleartext'我認爲是什麼被加密? – jason328

回答

3

河豚需要一個22字符串的鹽(不包括類型和成本參數)。 MD5返回一個字符串,不被crypt_blowfish接受。使用適當的鹽。

+0

因此,如果我可以通過切斷最後或前10個字符串來返回MD5,那麼可以接受,還是可以消除MD5的隨機性? – jason328

+0

@ jason328:這是可以接受的。 –

+0

提供較長的鹽會自動使用最初的22個字符,不需要特殊處理。 – lanzz

2

不,您不需要用加密的密碼存儲salt,因爲加密後的密碼會返回給您,鹽已經添加了。當您驗證明文密碼是否與加密的密碼匹配時,您只需檢查$crypted_password == crypt($plaintext_password, $crypted_password)