2017-06-07 52 views
2

從PHP頁面:http://php.net/manual/en/function.password-hash.php使用password_hash PASSWORD_DEFAULT遺留涉及

PASSWORD_DEFAULT - 使用bcrypt算法(默認爲PHP 5.5.0的)。請注意,隨着新的更強大的算法添加到PHP中,此常量將隨時間而改變。出於這個原因,使用這個標識符的結果的長度會隨着時間而改變。因此,建議將結果存儲在可擴展超過60個字符的數據庫列中(255個字符將是一個不錯的選擇)。

這是否意味着如果我在password_verify的密碼中使用了更新的版本,例如, PHP8,它可能無法正確解密存儲的密碼?或者是所有這些信息已經安全地嵌入了,我所要做的就是將password_hash的輸出存儲到我的數據庫中,並且只需要撥打password_verify進行驗證而無後顧之憂?

回答

1

是的,所有信息都是安全嵌入的,前提是您的數據庫不會截斷加密的密碼。我想,這幾乎是給定的。

這種警告是駕車回家的是,爲了您未來的自我的理智,您將信息存儲在長度靈活的字段中。歷史上,與MD5一樣,人們可能選擇了CHAR(32)。但是使用bcrypt,你需要選擇更靈活的東西。這可能是:

  • VARCHAR(255)
  • CHAR(60),本專欄是最後一個表中,以便延長其長度可能不需要RDBMS洗牌表。
+0

我使用MariaDB的和我有字段類型爲文本。可以嗎? –

+0

無界'TEXT'太過分了,我會用'VARCHAR'或者一個有界的'TEXT',像'TEXT(255)'。 – bishop

2

這是否意味着,如果我password_verify用最新版本的密碼,例如PHP8,它可能無法正確解密存儲的密碼?

否密碼哈希包含有關實際使用哪種特定算法的信息。如果未來版本的PHP支持多種密碼散列算法,它將能夠從舊散列中讀取這些信息以找出如何再現它。

(具體而言,$2y$前綴目前存在於所有哈希表明他們使用PASSWORD_BCRYPT算法生成。在任何未來的算法將使用不同的前綴。)