PHP Conference Japan 2024

sodium_crypto_pwhash

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_pwhash使用 Argon2 從密碼衍生金鑰

說明

sodium_crypto_pwhash(
    int $length,
    #[\SensitiveParameter] string $password,
    string $salt,
    int $opslimit,
    int $memlimit,
    int $algo = SODIUM_CRYPTO_PWHASH_ALG_DEFAULT
傳回值:字串

這個函式提供對 libsodium 的 crypto_pwhash 金鑰衍生函式的底層存取。除非您有特殊理由使用此函式,否則您應該使用 sodium_crypto_pwhash_str()password_hash() 函式來代替。

使用此特定函式的一個常見原因是從密碼和鹽衍生加密金鑰的種子,然後使用這些種子生成某些用途所需的實際金鑰(例如 sodium_crypto_sign_detached())。

參數

length

整數;要生成的密碼雜湊的長度,以位元組為單位。

password

字串;要生成雜湊的密碼。

salt

在雜湊之前添加到密碼的鹽。鹽應該是不可預測的,理想情況下是由良好的隨機數來源生成的,例如 random_bytes(),並且長度正好為 SODIUM_CRYPTO_PWHASH_SALTBYTES 位元組。

opslimit

表示要執行的最大計算量。提高此數字將使函式需要更多 CPU 週期來計算金鑰。有一些常數可用於根據預期用途將操作限制設置為適當的值,按強度順序排列:SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVESODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATESODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE

memlimit

函式將使用的最大 RAM 量,以位元組為單位。有一些常數可以幫助您選擇適當的值,按大小順序排列:SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVESODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATESODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE。通常,這些應該與匹配的 opslimit 值配對。

algo

整數 指示要使用的雜湊演算法的數字。預設為 SODIUM_CRYPTO_PWHASH_ALG_DEFAULT(目前推薦的演算法,可能會因 libsodium 的版本而異),或明確使用 SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13,表示 Argon2id 演算法版本 1.3。

傳回值

傳回衍生的金鑰。傳回值是雜湊的二進位字串,而不是 ASCII 編碼的表示形式,並且不包含用於創建雜湊的參數的其他資訊,因此如果您將來要驗證密碼,則需要保留該資訊。使用 sodium_crypto_pwhash_str() 可以避免需要執行所有這些操作。

範例

範例 #1 sodium_crypto_pwhash() 範例

<?php
// 需要保留鹽值,以便之後驗證密碼
$salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES);
// 使用 bin2hex 讓輸出結果可讀
echo bin2hex(
sodium_crypto_pwhash(
16, // == 128 位元
'password',
$salt,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13
)
);
?>

上述範例將輸出類似以下的內容

a18f346ba57992eb7e4ae6abf3fd30ee

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top