Php/docs/function.mcrypt-module-open
mcrypt_module_open
(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)
mcrypt_module_open — 打开算法和模式对应的模块
Warning 本函数已自 PHP 7.1.0 起废弃。强烈建议不要使用本函数。
说明
mcrypt_module_open
( string $algorithm
, string $algorithm_directory
, string $mode
, string $mode_directory
) : resource
本函数打开指定算法和模式对应的模块。
算法名称可以是字符串,例如 "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() - 对加密模块进行清理工作