簡短的回答是肯定的,它是向後兼容的,爲您的存儲允許更長的密碼哈希長度。
當您生成密碼時,您將以特定格式獲取密碼。
我已經使用bcrypt
和更新的argon2i
哈希生成了兩個密碼。 (在PHP 7.2中引入libsodium
)
僅供參考:我的代碼是基於libsodium擴展,因爲我沒有下載php 7.2,並且不打算爲別名安裝sodium_compat。 php 7.2語法將不包含任何名稱空間。
$bcrypt = password_hash('insecurepassword', PASSWORD_BCRYPT);
$argon2i = \Sodium\crypto_pwhash_str('insecurepassword', \Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, \Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE);
var_dump($bcrypt, $argon2i);
我,當我跑的輸出,這是此
string(60) "$2y$10$jiT0NF3u426kguHes8ZBputRE/n9OSdPi5HhHvEWW4mX1XDwKwy1e"
string(96) "$argon2i$v=19$m=32768,t=4,p=1$Ho4Vzgp5nzQkLlp99P+ViA$bDqX8UUlSnfLRCfFBzBnFhWr/hzHzuuUCfZ0LSIns64"
兩個密碼都相同的格式更多或更少。如果你爆炸$
你最終會得到驗證密碼所需的每一個難題。
第一部分包含算法。 2y
for bcrypt
,argon2i
for ... argon2i。 (驚喜!)
下一個位包含配置選項,所以在bcrypt
的情況下的成本。在argon2i
的情況下,有一些額外的配置。
最後一節包含要檢查的算法的實際密碼和salt。
對於更多的視覺崩潰結帳php docs。
即使我已經使用了一些不同的功能演示一些輸出,有可能被接受,在7.2推出了針對argon2i
哈希支持的password_hash
功能的rfc。
所以當那個時候到來的時候,password_verify
會「正常工作」,無論你是否給它一個bcrypt
或argon2i
散列來驗證密碼。
查看'password_verify'的文檔 – PeeHaa
謝謝。 「請注意,password_hash()返回算法,成本和salt作爲返回哈希的一部分,因此,驗證哈希所需的所有信息都包含在其中,這允許驗證函數驗證哈希,而不需要單獨存儲鹽或算法信息「。 – GregCatalano