mcrypt_module_open

Opens the module of the algorithm and the mode to be used

&warn.deprecated.function-7-1-0.removed-7-2-0;
&reftitle.description; `resource` `mcrypt_module_open` `string` `algorithm` `string` `algorithm_directory` `string` `mode` `string` `mode_directory`

This function opens the module of the algorithm and the mode to be used. The name of the algorithm is specified in algorithm, e.g. `"twofish"` or is one of the `MCRYPT_ciphername` constants. The module is closed by calling `mcrypt_module_close`.

&reftitle.parameters;

`algorithm`

- &mcrypt.parameter.cipher;

`algorithm_directory`

- The `algorithm_directory` parameter is used to locate the encryption module. When you supply a directory name, it is used. When you set it to an empty string (`""`), the value set by the `mcrypt.algorithms_dir` &php.ini; directive is used. When it is not set, the default directory that is used is the one that was compiled into libmcrypt (usually `/usr/local/lib/libmcrypt`).

`mode`

- &mcrypt.parameter.mode;

`mode_directory`

- The `mode_directory` parameter is used to locate the encryption module. When you supply a directory name, it is used. When you set it to an empty string (`""`), the value set by the `mcrypt.modes_dir` &php.ini; directive is used. When it is not set, the default directory that is used is the one that was compiled-in into libmcrypt (usually `/usr/local/lib/libmcrypt`).

&reftitle.returnvalues;

Normally it returns an encryption descriptor, or &false; on error.

&reftitle.examples;

### `mcrypt_module_open` Examples

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

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

The first line in the example above will try to open the `DES` cipher from the default directory and the `ECB` mode from the directory `/usr/lib/mcrypt-modes`. The second example uses strings as name for the cipher and mode, this only works when the extension is linked against libmcrypt 2.4.x or 2.5.x.

### Using `mcrypt_module_open` in encryption

    <?php
        /* Open the cipher */
        $td = mcrypt_module_open('rijndael-256', '', 'ofb', '');

        /* Create the IV and determine the keysize length, use MCRYPT_RAND
         * on Windows instead */
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
        $ks = mcrypt_enc_get_key_size($td);

        /* Create key (example only: MD5 is not a good hash algorithm for this) */
        $key = substr(hash('md5', 'very secret key'), 0, $ks);

        /* Intialize encryption */
        mcrypt_generic_init($td, $key, $iv);

        /* Encrypt data */
        $encrypted = mcrypt_generic($td, 'This is very important data');

        /* Terminate encryption handler */
        mcrypt_generic_deinit($td);

        /* Initialize encryption module for decryption */
        mcrypt_generic_init($td, $key, $iv);

        /* Decrypt encrypted string */
        $decrypted = mdecrypt_generic($td, $encrypted);

        /* Terminate decryption handle and close module */
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);

        /* Show string */
        echo trim($decrypted) . "\n";
    ?>

&reftitle.seealso;

- `mcrypt_module_close`
- `mcrypt_generic`
- `mdecrypt_generic`
- `mcrypt_generic_init`
- `mcrypt_generic_deinit`