crypt

(PHP 3, PHP 4, PHP 5)

crypt -- 文字列の一方向の暗号化(ハッシュ化)を行う

説明

string crypt ( string str, string [salt] )

crypt()は、Unix 標準の DES 暗号を使って文字列を暗号化します。引数には暗号化したい文字列を指 定し、オプションで暗号化のベースとなる 2 文字の'salt' 文字列を指 定します。暗号化に関する関数の詳細は Unix man ページを参照してく ださい。

salt引数が指定されない場合、この関数をコールするたびに PHPによりランダムに生成されます。

いくつかのオペレーティングシステムは、複数の暗号化方式をサポート しています。実際、標準のDES暗号の替わりにMD5に基づく暗号化アルゴ リズムが使用されることが時々あります。暗号化手法は、salt引数によ り選定されます。インストール時に、PHPはcrypt関数の機能を定義し、 他の暗号化方式用のsaltを受付ます。saltが指定されない場合、システ ムのデフォルトの暗号化手法がMD5でない限りPHPはデフォルトで標準の2 文字DES saltを自動的に生成します。暗号化手法がMD5の場合、MD5互換 のsaltが生成されます。PHPは、定数CRYPT_SALT_LENGTH を設定します。 この定数により、標準の2文字のsaltまたはより長い12文字MD5 saltのど ちらが適用可能であるかを知ることが可能です。

生成されたsaltを使用する場合、saltが生成されるのは一回限りである ことに気付く必要があります。この関数を繰り返しコールする場合、こ のことは、出力だけでなく、セキュリティにも影響を与える可能性があ ります。

標準DES暗号crypt()は、出力の最初の2文字をsalt として使用します。 strの最初の8文字を使用するだけです。 このため、(同じsaltを使用した場合、)同じ8文字から始まるより長い文 字列について同じ結果が生成されます。

crypt() 関数が複数の暗号化手法をサポートするシステムにおいては、 指定した型を利用可能であるかにより、次の定数を0又は1に設定します。

注意: crypt() は単方向アルゴリズムを使用している ため、復号化するための関数 (decrypt) はありません。

例 1. crypt()の例

<?php
$password
= crypt("My1sTpassword"); // saltを自動的に生成

/* 異なったハッシュアルゴリズムが使用された際の問題を避けるために
   crypt()の結果全体をパスワード比較用のsaltとして渡す必要があります。
   (上記のように標準DESに基づくパスワードハッシュは2文字のsaltを使用します
   が、MD5に基づくハッシュは12文字のsaltを使用します) */
if (crypt($user_input, $password) == $password) {
   echo
"Password verified!";
}
?>

例 2. Using crypt() with htpasswd

<?php
// Set the password
$password = 'mypassword';

// Get the hash, letting the salt be automatically generated
$hash = crypt($password);
?>

例 3. 異なる暗号化手法を用いた crypt() の例

<?php
if (CRYPT_STD_DES == 1) {
    echo
'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";
}

if (
CRYPT_EXT_DES == 1) {
    echo
'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";
}

if (
CRYPT_MD5 == 1) {
    echo
'MD5:          ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";
}

if (
CRYPT_BLOWFISH == 1) {
    echo
'Blowfish:     ' . crypt('rasmuslerdorf', '$2a$07$rasmuslerd...........$') . "\n";
}
?>

上の例の出力は、たとえば 以下のようになります。

Standard DES: rl.3StKT.4T8M
Extended DES: _J9..rasmBYk8r9AiWNc
MD5:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish:     $2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra

md5()およびmcrypt拡 張モジュールも参照ください。