函式名稱:sodium_crypto_pwhash_str()
適用版本:PHP 7.2.0以上
函式描述:該函式用於將密碼雜湊為字串格式,以便儲存和驗證使用者密碼。它基於Argon2密碼雜湊演算法,並使用隨機生成的salt和適當的引數來增加密碼的安全性。
語法:string sodium_crypto_pwhash_str(string $password, int $opslimit, int $memlimit)
引數:
- $password: 要雜湊的密碼字串。
- $opslimit: 迭代次數,用於控制密碼雜湊的計算複雜度。較高的值將增加計算時間並提高密碼的安全性。推薦值為至少 4。
- $memlimit: 記憶體限制,用於控制密碼雜湊的記憶體使用。較高的值將增加記憶體開銷並提高密碼的安全性。推薦值為至少 64 * 1024。
返回值:返回雜湊後的密碼字串,或者在失敗時返回 false。
示例:
$password = "myPassword123";
// 生成隨機的salt
$salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES);
// 定義迭代次數和記憶體限制
$opslimit = 4;
$memlimit = 64 * 1024;
// 生成雜湊後的密碼字串
$hashedPassword = sodium_crypto_pwhash_str($password, $opslimit, $memlimit);
// 儲存雜湊後的密碼字串到資料庫或其他持久化儲存中
// 驗證密碼
if (sodium_crypto_pwhash_str_verify($hashedPassword, $password)) {
echo "密碼驗證透過";
} else {
echo "密碼驗證失敗";
}
注意事項:
- 在每次生成雜湊密碼時,應使用不同的salt,以增加密碼的安全性。可以使用隨機位元組生成函式(如 random_bytes())來生成salt。
- 迭代次數和記憶體限制的值應根據具體情況進行調整,以平衡安全性和效能需求。
- 在驗證密碼時,可以使用 sodium_crypto_pwhash_str_verify() 函式。它接受雜湊後的密碼字串和原始密碼作為引數,如果驗證透過則返回 true,否則返回 false。