3 回答

TA貢獻1836條經驗 獲得超3個贊
CPasswordHelper的工作方式類似于PHP的函數password_hash()和password_verify(),它們是crypt()函數的包裝器。生成BCrypt哈希時,您將得到一個包含鹽的60個字符的字符串。
// Hash a new password for storing in the database.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
變量$ hashToStoreInDb現在將包含一個哈希值,如下所示:
$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | | |
| | | hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | |
| | salt = nOUIs5kJ7naTuTFkBy1veu
| |
| cost-factor = 10 = 2^10 iterations
|
hash-algorithm = 2y = BCrypt
您可以在第三個鹽之后找到鹽$,它由password_hash()使用操作系統的隨機源自動生成。因為鹽包含在結果字符串中,所以函數password_verify()或實際上是包裝的crypt函數可以從那里提取鹽,并可以使用相同的鹽(和相同的成本因數)計算哈希。那么這兩個哈希是可比較的。
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

TA貢獻1862條經驗 獲得超6個贊
由生成的散列CPasswordHelper
包含一個$
符號,后跟所選算法的代碼,另一個$
是成本因素(注意:如果看到10,則實際上意味著2 ^ 10次迭代!),另一個$
是a固定數量的字符為“ salt”,然后直接加上實際的哈希。
- 3 回答
- 0 關注
- 987 瀏覽
添加回答
舉報