W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_pwhash — 使用 Argon2 從密碼中派生密鑰
sodium_crypto_pwhash(
int $length,
string $password,
string $salt,
int $opslimit,
int $memlimit,
int $algo = SODIUM_CRYPTO_PWHASH_ALG_DEFAULT
): string
此函數(shù)提供對(duì) libsodium 的crypto_pwhash鍵派生函數(shù)的低級(jí)訪問(wèn)。除非您有特定原因使用此函數(shù),否則應(yīng)改用 sodium_crypto_pwhash_str() 或 password_hash() 函數(shù)。
使用此特定函數(shù)的一個(gè)常見(jiàn)原因是從密碼和 salt 派生加密密鑰的種子, 然后使用這些種子來(lái)生成用于某種目的的實(shí)際密鑰(例如sodium_crypto_sign_detached())。
length
整數(shù);要生成的密碼哈希的長(zhǎng)度(以字節(jié)為單位)。
password
字符串;要為其生成哈希的密碼。
salt
在哈希之前添加到密碼中的鹽。鹽應(yīng)該是不可預(yù)測(cè)的,理想情況下是從良好的隨機(jī)數(shù)源(如 random_bytes())生成的,并且長(zhǎng)度正好為 SODIUM_CRYPTO_PWHASH_SALTBYTES
字節(jié)。
opslimit
表示要執(zhí)行的最大計(jì)算量。提高此數(shù)字將使函數(shù)需要更多的 CPU 周期來(lái)計(jì)算密鑰。有一些常量可用于根據(jù)預(yù)期用途將操作限制設(shè)置為適當(dāng)?shù)闹?,按?qiáng)度順序排列:SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE
、SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE
和 SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE
。
memlimit
函數(shù)將使用的最大 RAM 量(以字節(jié)為單位)。有一些常量可幫助您按大小順序選擇適當(dāng)?shù)闹担?strong>SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
、SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE
和 SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE
。通常,這些值應(yīng)與匹配值配對(duì)。opslimit
algo
int指示要使用的哈希算法的數(shù)字。默認(rèn)情況下SODIUM_CRYPTO_PWHASH_ALG_DEFAULT
(當(dāng)前推薦的算法,可以從 libsodium 的一個(gè)版本更改為另一個(gè)版本),或顯式使用 SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13
,表示 Argon2id 算法版本 1.3。
返回派生的鍵。返回值是哈希的二進(jìn)制字符串,而不是 ASCII 編碼的表示形式,并且不包含有關(guān)用于創(chuàng)建哈希的參數(shù)的其他信息,因此,如果將來(lái)要驗(yàn)證密碼,則需要保留該信息。使用 sodium_crypto_pwhash_str() 來(lái)避免需要執(zhí)行所有這些操作。
示例 #1 sodium_crypto_pwhash() example
<?php
//Need to keep the salt if we're ever going to be able to check this password
$salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES);
//Using bin2hex to keep output readable
echo bin2hex(
sodium_crypto_pwhash(
16, // == 128 bits
'password',
$salt,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13
)
);
?>
以上示例的輸出類似于:
a18f346ba57992eb7e4ae6abf3fd30ee
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: