![](/img/trans.png)
[英]what is an alternative to password_hash() for (PHP 5 < 5.5.0)?
[英]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.