PHP crypt()関数
❮PHP文字列リファレンス
定義と使用法
crypt()関数は、DES、Blowfish、またはMD5アルゴリズムを使用してハッシュされた文字列を返します。
この関数は、オペレーティングシステムによって動作が異なります。PHPは、使用可能なアルゴリズムと、インストール時に使用するアルゴリズムをチェックします。
saltパラメータはオプションです。ただし、crypt()はソルトなしで弱いパスワードを作成します。セキュリティを強化するために、十分に強力なソルトを指定してください。
crypt()関数と一緒に使用される定数がいくつかあります。これらの定数の値は、インストール時にPHPによって設定されます。
定数:
- [CRYPT_STD_DES]-アルファベット「./0-9A-Za-z」からの2文字のソルトを含む標準のDESベースのハッシュ。ソルトに無効な文字を使用すると、この関数は失敗します。
- [CRYPT_EXT_DES]-アンダースコアとそれに続く4バイトの反復カウントと4バイトのソルトで構成される9文字のソルトを使用した拡張DESベースのハッシュ。これらは印刷可能な文字としてエンコードされ、1文字あたり6ビット、最下位文字が最初になります。値0〜63は、「。/0-9A-Za-z」としてエンコードされます。ソルトに無効な文字を使用すると、関数が失敗します。
- [CRYPT_MD5]-$ 1 $で始まる12文字のソルトを使用したMD5ハッシュ
- [CRYPT_BLOWFISH]-$ 2a $、$ 2x $、または$ 2y $で始まるソルト、2桁のコストパラメーター「$」、アルファベットの22文字「./0-9A-Za-z」を使用したBlowfishハッシュ。アルファベット以外の文字を使用すると、この関数は長さゼロの文字列を返します。 「$」パラメーターは、基になるBlowfish-bashedハッシュアルゴリズムの反復回数の2を底とする対数であり、範囲は04〜31である必要があります。この範囲外の値は、関数が失敗する原因になります。
- [CRYPT_SHA_256]-$ 5 $で始まる16文字のソルトを持つSHA-256ハッシュ。ソルト文字列が「rounds = <N> $」で始まる場合、Blowfishのコストパラメータと同様に、Nの数値を使用してハッシュループを実行する回数を示します。デフォルトのラウンド数は5000で、最小は1000、最大は999,999,999です。この範囲外のNを選択すると、最も近い制限に切り捨てられます。
- [CRYPT_SHA_512]-$ 6 $で始まる16文字のソルトを持つSHA-512ハッシュ。ソルト文字列が「rounds = <N> $」で始まる場合、Blowfishのコストパラメータと同様に、Nの数値を使用してハッシュループを実行する回数を示します。デフォルトのラウンド数は5000で、最小は1000、最大は999,999,999です。この範囲外のNを選択すると、最も近い制限に切り捨てられます。
この関数が複数のアルゴリズムをサポートしているシステムでは、上記の定数は、サポートされている場合は「1」に設定され、サポートされていない場合は「0」に設定されます。
注:復号化機能はありません。crypt()関数は一方向アルゴリズムを使用します。
構文
crypt(str,salt)
パラメータ値
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
技術的な詳細
戻り値: | エンコードされた文字列または13文字より短く、失敗時にソルトとは異なることが保証されている文字列を返します |
---|---|
PHPバージョン: | 4歳以上 |
変更ログ: | PHP 5.6.0- saltが省略されている場合、E_NOTICEセキュリティ警告を表示します。 PHP 5.3.7- $ 2x $および$ 2y $ Blowfishモードが追加されました。 PHP5.3.2-SHA-256とSHA-512を追加しました。無効なラウンドでのBlowfishの動作が、DESにフォールバックする代わりに、「失敗」文字列(「* 0」または「* 1」)を返す問題を修正しました。 PHP 5.3.0-PHPには、MD5暗号化、標準DES、拡張DES、およびBlowfishアルゴリズムの独自の実装が含まれ、システムが1つ以上のアルゴリズムのサポートを欠いている場合にそれを使用します。 |
その他の例
例
この例では、さまざまなアルゴリズムをテストします。
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16 character salt starting with $6$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>
上記のコードの出力は次のようになります(オペレーティングシステムによって異なります)。
Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.
❮PHP文字列リファレンス