«

PHP:mcrypt_module_open()的用法

时间:2024-3-1 21:00     作者:韩俊     分类: PHP


mcrypt_module_open

(PHP 4 >= 4.0.2, PHP 5)

mcrypt_module_open — 打开算法和模式对应的模块

说明

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

本函数打开指定算法和模式对应的模块。 算法名称可以是字符串,例如 "twofish", 也可以是 MCRYPT_ciphername 常量。 调用 mcrypt_module_close() 函数可以关闭模块。

参数

algorithm

MCRYPT_ciphername 常量中的一个,或者是字符串值的算法名称。

algorithm_directory

algorithm_directory 参数指示加密模块的位置。 如果你提供此参数,则使用你指定的值。 如果将此参数设置为空字符串(""),将使用 php.ini 中的 mcrypt.algorithms_dir 。 如果不指定此参数,则使用 libmcrypt 的编译路径 (通常是 /usr/local/lib/libmcrypt)。

mode

MCRYPT_MODE_modename 常量中的一个,或以下字符串中的一个:"ecb","cbc","cfb","ofb","nofb" 和 "stream"。

mode_directory

algorithm_directory 参数指示加密模式的位置。 如果你提供此参数,则使用你指定的值。 如果将此参数设置为空字符串(""),将使用 php.ini 中的 mcrypt.modes_dir 。 如果不指定此参数,则使用 libmcrypt 的编译路径 (通常是 /usr/local/lib/libmcrypt)。

返回值

成功则返回加密描述符,如果发生错误则返回 FALSE

范例

Example #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 模式。 第二个示例中,使用字符串形式表示算法和模式, 这种形式仅适用于 libmcrypt 2.4.x 或 2.5.x 版本。

Example #2 在加密中使用 mcrypt_module_open()

<?php
    /* 打开加密算法和模式 */
    $td = mcrypt_module_open('rijndael-256', '', 'ofb', '');

    /* 创建初始向量,并且检测密钥长度。 
     * 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";
?>

参见

mcrypt_module_close() - 关闭加密模块 mcrypt_generic() - 加密数据 mdecrypt_generic() - 解密数据 mcrypt_generic_init() - 初始化加密所需的缓冲区 mcrypt_generic_deinit() - 对加密模块进行清理工作

标签: php php教程

热门推荐