❮ PHP 文字列リファレンス
定義と使用法
crypt()関数は、DES、Blowfish、または MD5アルゴリズムを使用してハッシュ化された文字列を返します。
この関数は、オペレーティングシステムによって動作が異なります。 PHPは、使用可能なアルゴリズムと、インストール時に使用するアルゴリズムをチェックします。
saltパラメータはオプションです。ただし、crypt()はsaltなしで弱いパスワードを作成します。セキュリティを強化するために、十分に強力なsaltを指定してください。
crypt()関数と一緒に使用される定数がいくつかあります。これらの定数の値は、インストール時にPHPによって設定されます。
定数:
- [CRYPT_STD_DES] - アルファベット「./0-9A-Za-z」からの2文字のsaltを含む標準のDESベースのハッシュ。ソルトで無効な文字を使用すると、この関数が失敗します。
- [CRYPT_EXT_DES] - アンダースコアの後に続く4バイトの反復カウントと4バイトのソルトで構成される9文字のソルトを持つ拡張DESベースのハッシュ。これらは、印刷可能な文字として、1文字あたり6ビット、最下位文字が最初にエンコードされます。 0~63の値は、「./0-9A-Za-z」としてエンコードされます。saltで無効な文字を使用すると、関数が失敗します。
- [CRYPT_MD5] - $1$で始まる12文字のソルトによるMD5ハッシュ
- [CRYPT_BLOWFISH] - 2a$、$2x$、$2y$で始まるsalt、2桁のコスト・パラメータ"$"、アルファベット"./0-9A-Za-z "の22文字でブローフィッシュ・ハッシュを行う。アルファベット以外の文字を使うと、この関数は長さゼロの文字列を返す。パラメータ"$"は、基礎となるBlowfish-bashed hashing algorithmeterの反復回数の基数2の対数であり、範囲04-31でなければなりません。この範囲外の値を指定すると、この関数は失敗します。
- [CRYPT_SHA_256] - $5$で始まる16文字のsaltを持つSHA-256ハッシュ。salt文字列が「rounds=<N>$」で始まる場合、Nの数値は、Blowfishのコストパラメータと同様に、ハッシュループを実行する回数を示すために使用されます。デフォルトのラウンド数は5000で、最小は1000、最大は999,999,999です。この範囲外のNを選択すると、最も近い制限に切り捨てられます。
- [CRYPT_SHA_512] - $6$で始まる16文字のsaltを持つ SHA-512ハッシュ。 salt文字列が「rounds=<N>$」で始まる場合、Nの数値は、Blowfishのコストパラメータと同様に、ハッシュループを実行する回数を示すために使用されます。デフォルトのラウンド数は5000で、最小は1000、最大は999,999,999です。この範囲外のNを選択すると、最も近い制限に切り捨てられます。
この関数が複数のアルゴリズムをサポートするシステムでは、上記の定数は、サポートされている場合は「1」に設定され、サポートされていない場合は「0」に設定されます。
注:復号化機能はありません。 crypt()関数は一方向アルゴリズムを使用します。
構文
<div>crypt(<em>str,salt</em>)</div>
パラメータ値
パラメータ |
説明 |
str |
Required ハッシュする文字列を指定します |
salt |
Optional ハッシュのベースとなるsalt文字列 |
Technical Details
Return Value: |
エンコードされた文字列、または13文字より短く、失敗時にsaltと異なることが保証されている文字列を返します |
PHP バージョン: |
4+ |
変更ログ: |
PHP 5.6.0 - E_NOTICEセキュリティ警告を表示するsaltは省略します。
PHP 5.3.7 - $2x$および $2y$Blowfishモードを追加しました。
PHP 5.3.2 - SHA-256およびSHA-512が追加されました。 無効なラウンドでのBlowfishの動作が、DESにフォールバックする代わりに、"failure" 文字列 ("*0" または "*1") を返す問題を修正しました。
PHP5.3.0 - PHP には、MD5crypt、標準DES、 拡張DESおよびBlowfishアルゴリズム。システムに不足している場合はそれを使用します。 1 つ以上のアルゴリズムのサポート。 |
その他の例
例
この例では、さまざまなアルゴリズムをテストします。
<span class="phpcolor" style="color:black"><span class="phptagcolor" style="color:red"><?php</span>
<span class="phpnumbercolor" style="color:red"></span><span class="commentcolor" style="color:green">// 2 character salt
</span><span class="phpnumbercolor" style="color:red"></span> <span class="phpkeywordcolor" style="color:mediumblue">if</span> (CRYPT_STD_DES == <span class="phpnumbercolor" style="color:red">1</span>)
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"Standard DES: "</span>.crypt(<span class="phpstringcolor" style="color:brown">'something'</span>,<span class="phpstringcolor" style="color:brown">'st'</span>).<span class="phpstringcolor" style="color:brown">"\n<br>"</span>;<span class="phpnumbercolor" style="color:red"></span>
}
<span class="phpkeywordcolor" style="color:mediumblue">else</span>
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"Standard DES not supported.\n<br>"</span>;
}
<span class="phpnumbercolor" style="color:red"></span> <span class="commentcolor" style="color:green">// 4 character salt
</span><span class="phpkeywordcolor" style="color:mediumblue">if</span> (CRYPT_EXT_DES == <span class="phpnumbercolor" style="color:red">1</span>)
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"Extended DES: "</span>.crypt(<span class="phpstringcolor" style="color:brown">'something'</span>,<span class="phpstringcolor" style="color:brown">'_S4..some'</span>).<span class="phpstringcolor" style="color:brown">"\n<br>"</span>;
}
<span class="phpkeywordcolor" style="color:mediumblue">else</span>
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"Extended DES not supported.\n<br>"</span>;
}
<span class="commentcolor" style="color:green">// 12 character salt starting with $1$
</span><span class="phpkeywordcolor" style="color:mediumblue">if</span> (CRYPT_MD5 == <span class="phpnumbercolor" style="color:red">1</span>)
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"MD5: "</span>.crypt(<span class="phpstringcolor" style="color:brown">'something'</span>,<span class="phpstringcolor" style="color:brown">'$1$somethin$'</span>).<span class="phpstringcolor" style="color:brown">"\n<br>"</span>;
}
<span class="phpkeywordcolor" style="color:mediumblue">else</span>
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"MD5 not supported.\n<br>"</span>;
}
<span class="commentcolor" style="color:green">// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
</span><span class="phpkeywordcolor" style="color:mediumblue">if</span> (CRYPT_BLOWFISH == <span class="phpnumbercolor" style="color:red">1</span>)
{
<span class="phpnumbercolor" style="color:red"></span> <span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"Blowfish: "</span>.crypt(<span class="phpstringcolor" style="color:brown">'something'</span>,<span class="phpstringcolor" style="color:brown">'$2a$09$anexamplestringforsalt$'</span>).<span class="phpstringcolor" style="color:brown">"\n<br>"</span>;<span class="phpnumbercolor" style="color:red"></span>
}
<span class="phpkeywordcolor" style="color:mediumblue">else</span>
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"Blowfish DES not supported.\n<br>"</span>;
}
<span class="phpnumbercolor" style="color:red"></span> <span class="commentcolor" style="color:green">// 16 character salt starting with $5$. The default number of rounds is 5000.
</span><span class="phpkeywordcolor" style="color:mediumblue">if</span> (CRYPT_SHA256 == <span class="phpnumbercolor" style="color:red">1</span>)
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"SHA-256: "</span>.crypt(<span class="phpstringcolor" style="color:brown">'something'</span>,<span class="phpstringcolor" style="color:brown">'$5$rounds=5000$anexamplestringforsalt$'</span>).<span class="phpstringcolor" style="color:brown">"\n<br>"</span>; }
<span class="phpnumbercolor" style="color:red"></span> <span class="phpkeywordcolor" style="color:mediumblue">else</span>
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"SHA-256 not supported.\n<br>"</span>;
}
<span class="commentcolor" style="color:green">// 16 character salt starting with $6$. The default number of rounds is 5000.
</span><span class="phpnumbercolor" style="color:red"></span> <span class="phpkeywordcolor" style="color:mediumblue">if</span> (CRYPT_SHA512 == <span class="phpnumbercolor" style="color:red">1</span>)
{
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"SHA-512: "</span>.crypt(<span class="phpstringcolor" style="color:brown">'something'</span>,<span class="phpstringcolor" style="color:brown">'$6$rounds=5000$anexamplestringforsalt$'</span>);
}
<span class="phpkeywordcolor" style="color:mediumblue">else</span>
<span class="phpnumbercolor" style="color:red"></span> {
<span class="phpkeywordcolor" style="color:mediumblue">echo</span> <span class="phpstringcolor" style="color:brown">"SHA-512 not supported."</span>;
}
<span class="phptagcolor" style="color:red">?></span></span>
上記のコードの出力は次のようになります(オペレーティング システムによって異なります)。
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 文字列リファレンス