簡體   English   中英

password_hash中的默認算法是什么

[英]What is the default algorithm in password_hash

閱讀有關PHP 5.5的新password_hash函數的文檔,我想知道,默認算法是什么:

password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

有關它的文檔沒有說明這一點: http//www.php.net/manual/en/password.constants.php

我已經了解了PHP源代碼。 它默認為PHP5.5中的bcrypt。

ext/standard/php_password.h line 31

#define PHP_PASSWORD_DEFAULT    PHP_PASSWORD_BCRYPT

這已在password_hash()的文檔中更新,並將在常量頁面中更新(我剛剛提交了大約一個小時左右的文檔更改)。

今天將在password.constants上播放

從更新的常量頁面(尚未生效,但今天晚些時候):

可用算法:

  • PASSWORD_BCRYPT (integer)

    PASSWORD_BCRYPT用於使用CRYPT_BLOWFISH算法創建新的密碼哈希值。

    這將始終導致使用“$ 2y $”crypt格式的哈希值,該格式總是60個字符寬。

    支持的選項:

    • salt - 在散列密碼時手動提供鹽。 請注意,這將覆蓋並防止自動生成salt。

      如果省略,則每個密碼哈希值都會通過password_hash()生成隨機鹽。 這是預期的操作模式。

    • 成本 - 表示應該使用的算法成本。 可以在crypt()頁面上找到這些值的示例。

      如果省略,將使用默認值10。 這是一個很好的基准成本,但您可能需要考慮根據您的硬件增加它。

  • PASSWORD_DEFAULT (integer)

    如果未提供算法,則用於散列的默認算法。 當支持更新,更強大的哈希算法時,這可能會在較新的PHP版本中發生變化。

    值得注意的是,隨着時間的推移,這個常數會(並且可能會)發生變化。 因此,您應該知道生成的哈希的長度可以更改。 因此,如果使用PASSWORD_DEFAULT,則應該以可以存儲超過60個字符的方式存儲生成的哈希值(255是推薦的寬度)。

    此常量的值:

    • PHP 5.5.0 - PASSWORD_BCRYPT

至於何時以及如何更新PASSWORD_DEFAULT ,請訪問password_hash()文檔頁面

注意:此功能對受支持算法的更新(或對默認算法的更改)必須遵循以下規則:

  • 在成為默認值之前,任何新算法必須在核心中至少有1個完整版本的PHP。 因此,例如,如果在5.5.5中添加了新算法,則在5.7之前它將不符合默認條件(因為5.6將是第一個完整版本)。 但是如果在5.6.0中添加了不同的算法,它也有資格默認為5.7.0。

  • 默認值應僅在完整版本(5.6.0,6.0.0等)上更改,而不在修訂版本上更改。 唯一的例外是在當前默認情況下發現嚴重安全漏洞的緊急情況。

如果措辭有點差,那么文檔實際上是相當具體的; 哈希是PHP認為當時可用的最強的哈希值,並且隨時可能發生變化。 password_hash生成的哈希在開始時包含一些數據,指示最初用於生成它們的數據,允許在新哈希算法可用時自動進行此類升級,而不會破壞已存儲在數據庫中的任何哈希值。

由於bcrypt是當前定義的唯一算法,你可以假設它是默認的,但是一種快速的驗證方法是制作一個簡單的PHP腳本,它將兩次相同的字符串,每個選項一次,並使用固定的鹽,打印出最終的哈希值; 他們可能會匹配。

原始的password_hash規范也可能有所幫助。 https://wiki.php.net/rfc/password_hash

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM