PHP8 sodium_crypto_pwhash

2024-03-18 13:43 更新

(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ù)提供對 libsodium 的crypto_pwhash鍵派生函數(shù)的低級訪問。除非您有特定原因使用此函數(shù),否則應改用 sodium_crypto_pwhash_str() 或 password_hash() 函數(shù)。

使用此特定函數(shù)的一個常見原因是從密碼和 salt 派生加密密鑰的種子, 然后使用這些種子來生成用于某種目的的實際密鑰(例如sodium_crypto_sign_detached())。

參數(shù) 

length

整數(shù);要生成的密碼哈希的長度(以字節(jié)為單位)。

password

字符串;要為其生成哈希的密碼。

salt

在哈希之前添加到密碼中的鹽。鹽應該是不可預測的,理想情況下是從良好的隨機數(shù)源(如 random_bytes())生成的,并且長度正好為 SODIUM_CRYPTO_PWHASH_SALTBYTES 字節(jié)。

opslimit

表示要執(zhí)行的最大計算量。提高此數(shù)字將使函數(shù)需要更多的 CPU 周期來計算密鑰。有一些常量可用于根據(jù)預期用途將操作限制設置為適當?shù)闹?,按強度順序排列?strong>SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE、SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE 和 SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE。

memlimit

函數(shù)將使用的最大 RAM 量(以字節(jié)為單位)。有一些常量可幫助您按大小順序選擇適當?shù)闹担?strong>SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE、SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE 和 SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE。通常,這些值應與匹配值配對。opslimit

algo

int指示要使用的哈希算法的數(shù)字。默認情況下SODIUM_CRYPTO_PWHASH_ALG_DEFAULT(當前推薦的算法,可以從 libsodium 的一個版本更改為另一個版本),或顯式使用 SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13,表示 Argon2id 算法版本 1.3。

返回值 

返回派生的鍵。返回值是哈希的二進制字符串,而不是 ASCII 編碼的表示形式,并且不包含有關用于創(chuàng)建哈希的參數(shù)的其他信息,因此,如果將來要驗證密碼,則需要保留該信息。使用 sodium_crypto_pwhash_str() 來避免需要執(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)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號