3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
CPasswordHelper的工作方式類似于PHP的函數(shù)password_hash()和password_verify(),它們是crypt()函數(shù)的包裝器。生成BCrypt哈希時(shí),您將得到一個(gè)包含鹽的60個(gè)字符的字符串。
// Hash a new password for storing in the database.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
變量$ hashToStoreInDb現(xiàn)在將包含一個(gè)哈希值,如下所示:
$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | | |
| | | hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | |
| | salt = nOUIs5kJ7naTuTFkBy1veu
| |
| cost-factor = 10 = 2^10 iterations
|
hash-algorithm = 2y = BCrypt
您可以在第三個(gè)鹽之后找到鹽$,它由password_hash()使用操作系統(tǒng)的隨機(jī)源自動(dòng)生成。因?yàn)辂}包含在結(jié)果字符串中,所以函數(shù)password_verify()或?qū)嶋H上是包裝的crypt函數(shù)可以從那里提取鹽,并可以使用相同的鹽(和相同的成本因數(shù))計(jì)算哈希。那么這兩個(gè)哈希是可比較的。
// 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貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
由生成的散列CPasswordHelper
包含一個(gè)$
符號(hào),后跟所選算法的代碼,另一個(gè)$
是成本因素(注意:如果看到10,則實(shí)際上意味著2 ^ 10次迭代?。?,另一個(gè)$
是a固定數(shù)量的字符為“ salt”,然后直接加上實(shí)際的哈希。
- 3 回答
- 0 關(guān)注
- 990 瀏覽
添加回答
舉報(bào)