(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_pwhash_str — ASCII 文字でエンコードされたハッシュ値を得る
$password
, int $opslimit
, int $memlimit
): stringランダムに生成されたソルト値と、 CPU とメモリへの攻撃に強いハッシュアルゴリズムを使い、 指定されたメモリとCPUの使用量の最大値に基づき、 パスワードの保存に適した ASCII 文字でエンコードされたハッシュを生成します。
password
ハッシュを生成するパスワードを文字列で指定します。
opslimit
実際に行う計算処理の最大量。
この値を大きくすると、
キーを計算するのに必要なCPUサイクルが増加します。
意図した使い方次第で、
適切な値の上限値を設定するために、いくつかの定数が存在します。
弱いものから強いものへと並べると、以下のとおりです:
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE
,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE
,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE
です。
memlimit
この関数が使用するメモリの最大値をバイト単位で指定します。
適切な値を選ぶために、ヘルパとなる定数が存在します。
サイズの順に、以下の通りです:
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE
,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE
があります。
これらの値は、opslimit
と一致するものとペアになるべきです。
ハッシュ化されたパスワードを返します。
同じパスワードから同じパスワードハッシュを生成するには、
opslimit
と
memlimit
の値を同じにしなければいけません。
これらは生成されたハッシュに埋め込まれているので、
ハッシュを検証する際に必要な全てが含まれています。
これによって、
sodium_crypto_pwhash_str_verify()
関数が、他の引数に関する情報を追加で保存せずにハッシュを検証できるのです。
例1 sodium_crypto_pwhash_str() の例
<?php
$password = 'password';
echo sodium_crypto_pwhash_str(
$password,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
上の例の出力は、 たとえば以下のようになります。
$argon2id$v=19$m=65536,t=2,p=1$oWIfdaXwWwhVmovOBc2NAQ$EbsZ+JnZyyavkafS0hoc4HdaOB0ILWZESAZ7kVGa+Iw
注意:
ハッシュ値は Argon2ID アルゴリズムを使って計算されます。 このアルゴリズムは、GPU に対する攻撃と サイドチャネル攻撃の両方に対する耐性を提供します。 password_hash() と異なり、 salt の引数は存在せず(自動生成されます)、
opslimit
とmemlimit
の値が必須になっています。