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

# 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 で 非推奨となり、PHP 7.2.0 で削除 されました。この関数に頼らないことを強く推奨します。

### 説明

function 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);

        /* キーを作成します (例示のみ: MD5 は、この用途には不向きなハッシュアルゴリズムです) */
        $key = substr(hash('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";
    ?>

### 参考

- mcrypt_module_close() - mcrypt モジュールを閉じる
- mcrypt_generic() - データを暗号化する
- mdecrypt_generic() - データを復号する
- mcrypt_generic_init() - 暗号化に必要な全てのバッファを初期化する
- mcrypt_generic_deinit() - 暗号化モジュールを終了する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open