(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_pwhash_str — ASCII 文字でエンコードされたハッシュ値を得る
$password, int $opslimit, int $memlimit): stringランダムに生成されたソルト値と、 CPU とメモリへの攻撃に強いハッシュアルゴリズムを使い、 指定されたメモリとCPUの使用量の最大値に基づき、 パスワードの保存に適した ASCII 文字でエンコードされたハッシュを生成します。
passwordopslimitSODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE です。
memlimitSODIUM_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の値が必須になっています。