亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

yii CPasswordHelper:hashPassword和verifyPassword

yii CPasswordHelper:hashPassword和verifyPassword

慕田峪9158850 2019-12-05 15:42:46
我想我在這里錯過了一些關鍵的事情。在CPasswordHelper::hashPassword函數中,我們有以下幾行:$salt=self::generateSalt($cost);  $hash=crypt($password,$salt);  return $hash;在CPasswordHelper::verifyPassword這行中:$test=crypt($password,$hash);  return self::same($test, $hash);那鹽呢?據我了解,它甚至沒有被保留,但沒有任何意義,所以我想我還沒有完全理解它
查看完整描述

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);


查看完整回答
反對 回復 2019-12-05
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

鹽作為哈希的一部分存儲。


查看完整回答
反對 回復 2019-12-05
?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

由生成的散列CPasswordHelper包含一個$符號,后跟所選算法的代碼,另一個$是成本因素(注意:如果看到10,則實際上意味著2 ^ 10次迭代!),另一個$是a固定數量的字符為“ salt”,然后直接加上實際的哈希。

查看完整回答
反對 回復 2019-12-05
  • 3 回答
  • 0 關注
  • 987 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號