閱讀有關新password_hash功能PHP 5.5的文檔默認的算法,我想知道,什麼是默認算法:什麼是password_hash
password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
關於它的文檔沒有說明這一點:http://www.php.net/manual/en/password.constants.php
閱讀有關新password_hash功能PHP 5.5的文檔默認的算法,我想知道,什麼是默認算法:什麼是password_hash
password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
關於它的文檔沒有說明這一點:http://www.php.net/manual/en/password.constants.php
這已在password_hash()的文檔中更新,並將在常量頁面中很快更新(我剛剛在大約一個小時前提交了文檔更改)。
這將是今天生活在password.constants
從更新常數頁面(這還沒有去現場還,但將在今天晚些時候):
可用算法:
PASSWORD_BCRYPT (integer)
PASSWORD_BCRYPT
用於c使用CRYPT_BLOWFISH
算法重新設置新密碼哈希。這將始終導致使用「$ 2y $」隱式格式的哈希值,該格式始終爲60個字符寬。
支持的選項:
鹽 - 手動提供鹽散列的口令時使用。請注意,這將覆蓋並防止鹽自動生成。
如果省略,每個密碼散列都會通過password_hash()生成隨機salt。這是預定的操作模式。
成本 - 它表示應該使用的算法成本。這些值的例子可以在crypt()頁面找到。
如果省略,則使用默認值10。這是一個很好的基準成本,但您可能需要考慮根據您的硬件來增加它。
PASSWORD_DEFAULT (integer)
默認算法使用如果沒有提供算法散列。當新的PHP版本支持更新,更強大的哈希算法時,這可能會發生變化。
值得注意的是,隨着時間的推移,這個常數可能(也可能會)改變。因此你應該知道結果散列的長度可以改變。因此,如果您使用PASSWORD_DEFAULT,則應以可存儲超過60個字符(255是建議寬度)的方式存儲結果散列。
值這個常數:
- PHP 5.5.0 - PASSWORD_BCRYPT
至於何時以及如何PASSWORD_DEFAULT
將被更新,這是在password_hash()
documentation page:
注:更新支持的算法通過此功能(或更改默認的)必須遵循以下規則:
任何新的算法必須在覈心至少1 PHP的充分釋放成爲前默認。因此,例如,如果在5.5.5中添加了新算法,那麼直到5.7(因爲5.6將是第一個完整版本)纔會有資格進行缺省設置。但是如果在5.6.0中添加了不同的算法,它也有資格在5.7.0處默認。
默認值只能在完整版本(5.6.0,6.0.0等)上更改,而不能在修訂版本上更改。唯一的例外是在當前默認情況下發現嚴重安全缺陷時的緊急情況。
我看了一下PHP源代碼。它默認使用PHP5.5中的bcrypt。
從ext/standard/php_password.h line 31
:
#define PHP_PASSWORD_DEFAULT PHP_PASSWORD_BCRYPT
文檔其實是相當具體的,如果有點措辭不當;散列是PHP認爲當時可用的最強大的散列,並隨時可能發生變化。由password_hash生成的哈希在開始時包含一些數據,指示最初用於生成它們的數據,允許在新的哈希算法可用時自動進行升級,而不會破壞已存儲在數據庫中的哈希。
由於bcrypt是目前定義的唯一算法,您可以假設它是默認值,但快速驗證的方法是製作一個簡單的PHP腳本,它將兩次散列相同的字符串,每個選項散列一次,固定鹽,並打印所產生的散列;他們可能會匹配。
原來的password_hash規範也可能有一些幫助。 https://wiki.php.net/rfc/password_hash
看起來像一些內部散列。 – DevZer0
查看http://us2.php.net/password_hash的文檔,它看起來像BCrypt。他們在輸入中引用它,輸出類似於BCrypt輸出,但我不能肯定地說。 –
當新的PHP版本支持更新,更強大的哈希算法時,這可能會發生變化。 – hjpotter92