PHP crypt() 関数


❮ PHP 文字列リファレンス

定義と用法

crypt() 関数は、DES、Blowfish、または MD5 アルゴリズムを使用してハッシュした文字列を返します。

この関数は、オペレーティングシステム毎に異なった動作をします。 PHPは、インストール時に、どのアルゴリズムが利用可能で、どのアルゴリズムを使用するかをチェックします。

salt パラメータは任意です。しかし、saltを指定しない場合、cryp() 弱いパスワードを作成します。安全性を高めるには salt を十分に強いものにしてください。

cryp() 関数と一緒に使用するいくつかの定数があります。これらの定数の値はPHPのインストール時に設定されます。

定数:

この関数が複数のアルゴリズムをサポートするシステムでは、上記の定数は、サポートされている場合は "1" に、そうでない場合は "0" に設定されます。

注: 解読機能はありません。crypt()関数は一方向アルゴリズムを使用します。


構文

crypt(str,salt)

パラメータ 説明
str 必須。ハッシュする文字列を指定する
salt 任意。ハッシュの基礎となる salt 文字列

技術内容
返り値: ハッシュした文字列を返します。 失敗した場合は、salt とは異なることが保証されている 13 文字未満の文字列を返します
PHP バージョン: 4+
変更歴 Blowfish のモード $2x$ および $2y$ が追加され、高ビット攻撃に対応できるようになりました。

PHP 5.3.2で、SHA-256 および SHA-512 による暗号化が追加されました。

PHP 5.3.2で、Blowfish で無効な rounds を指定したときに、DES に切り替えるのではなく "failure" 文字列 ("*0" あるいは "*1") を返すようになりました。

PHP 5.3.0で、PHP に MD5 crypt, Standard DES, Extended 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.";
}
?>

output of the code above could be (depending on the operating system):

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