TECH I.S.

PHP crypt()関数


❮ 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 文字列リファレンス


プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細