mcrypt_module_open

(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)

mcrypt_module_open使用するアルゴリズムおよびモードのモジュールをオープンする

警告

この関数は PHP 7.1.0 で 非推奨になります。この関数に頼らないことを強く推奨します。

説明

mcrypt_module_open ( string $algorithm , string $algorithm_directory , string $mode , string $mode_directory ) : resource

この関数は、使用するアルゴリズムおよびモードのモジュールをオープン します。アルゴリズム名は、たとえば "twofish" のように名前で指定するか定数 MCRYPT_暗号名 のいずれかを使用して指定します。 ライブラリは mcrypt_module_close() をコールする ことによりクローズされます。

パラメータ

algorithm

MCRYPT_暗号名 定数のいずれか、 あるいはアルゴリズム名をあらわす文字列。

algorithm_directory

暗号化モジュールの位置を指定する際には algorithm_directory を使います。 ディレクトリ名を指定した場合には、これが使用されます。 これらの一つに空の文字列("")を指定した場合、php.ini ディレクティブ mcrypt.algorithms_dir に設定された値を使います。 これらが設定されていない場合、libmcrypt をコンパイルした際の デフォルトのディレクトリ (通常は/usr/local/lib/libmcrypt) を使います。

mode

定数 MCRYPT_MODE_モード名、あるいは文字列 "ecb", "cbc", "cfb", "ofb", "nofb" ,"stream" のいずれか。

mode_directory

暗号化モジュールの位置を指定する際には mode_directory を使います。 ディレクトリ名を指定した場合には、これが使用されます。 これらの一つに空の文字列("")を指定した場合、php.ini ディレクティブ mcrypt.modes_dir に設定された値を使います。 これらが設定されていない場合、libmcrypt をコンパイルした際の デフォルトのディレクトリ (通常は/usr/local/lib/libmcrypt) を使います。

返り値

通常は暗号化記述子を返します。エラー時は FALSE を返します。

例1 mcrypt_module_open() の例

<?php
    $td 
mcrypt_module_open(MCRYPT_DES'',
        
MCRYPT_MODE_ECB'/usr/lib/mcrypt-modes');

    
$td mcrypt_module_open('rijndael-256''''ofb''');
?>

上の例の最初の行では、デフォルトのディレクトリから DES 暗号化を、 そして /usr/lib/mcrypt-modes から ECB モードの オープンを試みます。2 行目の例では暗号化形式とモードを文字列で 指定しています。これは、libmcrypt 2.4.x あるいは 2.5.x に対して 拡張モジュールがリンクされている場合にのみ使用可能です。

例2 mcrypt_module_open() を暗号化で使用する

<?php
    
/* 暗号モジュールをオープンします */
    
$td mcrypt_module_open('rijndael-256''''ofb''');

    
/* IV を作成し、キー長を定義します。Windows では、かわりに
     * MCRYPT_RAND を使用します */
    
$iv mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
    
$ks mcrypt_enc_get_key_size($td);

    
/* キーを作成します */
    
$key substr(md5('very secret key'), 0$ks);

    
/* 暗号化処理を初期化します */
    
mcrypt_generic_init($td$key$iv);

    
/* データを暗号化します */
    
$encrypted mcrypt_generic($td'This is very important data');

    
/* 暗号化ハンドラを終了します */
    
mcrypt_generic_deinit($td);

    
/* 復号用の暗号モジュールを初期化します */
    
mcrypt_generic_init($td$key$iv);

    
/* 暗号化された文字列を復号します */
    
$decrypted mdecrypt_generic($td$encrypted);

    
/* 復号ハンドルを終了し、モジュールを閉じます */
    
mcrypt_generic_deinit($td);
    
mcrypt_module_close($td);

    
/* 文字列を表示します */
    
echo trim($decrypted) . "\n";
?>

参考