PHP8 sodium_crypto_pwhash

2024-03-18 13:43 更新

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_pwhash — 使用 Argon2 從密碼中派生密鑰

說(shuō)明

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())。

參數(shù) 

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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)