2011-11-07 89 views
1

要加密:這個PHP crypt的例子正確嗎?

$encryptedPassword = crypt($password, '$2a$07$usesomesillystringforsalt$'); 

如若$ usesomesillystringforsalt $一部分是隨機的還是固定的? (我猜是固定的,但我想確定)。


結果例如:

$2a$07$usesomesillystringforeHwaCeDEv6rYjbWCzbzsFKwD4sDLktr 

這是一個正確的加密值?


要檢查是否由用戶指定的密碼登錄正確的是:

(比方說,有一個名爲password輸入字段,並從數據庫中檢索到的$password值進行比較):

if (crypt($_POST['password'], '$2a$07$usesomesillystringforsalt$') === crypt($password, '$2a$07$usesomesillystringforsalt$')) { 
    // Password submitted is correct 
} 
+1

你爲什麼不嘗試一下,找出答案?那麼如果它不作爲一個具體的問題。 –

+0

嗯,它確實工作。但也許我錯過了一些東西。我在問 – federicot

+1

背後的邏輯是否有問題將原始密碼或加密密碼存儲在數據庫中? (它應該是加密的)。在你發佈的第二塊代碼中,如果'$ password'是你數據庫的值,那麼你不需要再加密。你應該比較'crypt($ input,$ salt)=== $ password' –

回答

1

典型的salt存儲在每個用戶的數據庫中,所以如果攻擊者能夠訪問整個密碼數據庫,攻擊者必須單獨暴力破解每個用戶。

此外,使用salt的每個站點或每個應用程序部分是有意義的,以確保常用密碼和常用鹽的表格(一個或兩個字符很容易,日期可以容忍,該紀元會更大,因爲紀元時間會很困難,128位的隨機性是不可能的)不能用於你的應用程序的數據庫。如果您的每用戶鹽足夠大,則這種用處不大 - 所以如果您的數據庫有足夠的空間存儲更大的每用戶鹽,那就去做吧。

+0

每個用戶的鹽含量+每個表的含鹽量部分看起來像是一個LOT。但它確實確保了更多的安全性。但我不認爲,強制使用河豚加密密碼是一項簡單的工作,但安全性越高越好 – federicot