簡體   English   中英

password_hash輸出的格式是什么?

[英]What is the format of password_hash output?

我知道PHP函數, password_hash輸出算法,cost,salt和hash都在一個字符串中,所以password_verify可以檢查密碼。

PHP頁面的示例輸出:

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

因此$ 2y $代表算法, 10代表成本。 但是password_verify如何將哈希值與哈希分開? 之后我沒有看到任何標識符將兩者分開。

對於密碼哈希的bCrypt版本。 Bcrypt具有固定長度的鹽值。 當您使用帶有默認算法的password_hash()/ password_verify()時,PHP內部調用的crypt函數具有16字節的鹽。 這是自定義base64字母A-Za-z/.的22個字符A-Za-z/. 然后它將字符串解碼為字節,因為22個B64字符編碼為16.5Bytes,有一個額外的半字節數據沒有被考慮在內。

對於所有其他哈希,salt值是一組定義的字節,當然可以編碼為ASCII安全b64並放在$符號之后,然后驗證函數只需要通過分隔符$將字符串拆分成部分然后去第三組字符獲得substr(0,B64_ENCODED_HASH_ALGORITHM_SALT_LEN) 之后,它將傳遞它從分裂字符串中獲得的參數,並將這些參數傳遞回password_hash函數以及要檢查的密碼。

它給你的字符串在大多數情況下由散列算法的標准定義,但幾乎總是符合模式

$<ALGORITHM_ID>$<COST_IN_FORMAT>$<BASE64_ENCODED_SALT><BASE64_ENCODED_HASH>$

暫無
暫無

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

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