(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)
mcrypt_module_open — 打開算法和模式對(duì)應(yīng)的模塊
本函數(shù)已自 PHP 7.1.0 起廢棄。強(qiáng)烈建議不要使用本函數(shù)。
$algorithm
,$algorithm_directory
,$mode
,$mode_directory
本函數(shù)打開指定算法和模式對(duì)應(yīng)的模塊。
算法名稱可以是字符串,例如 "twofish"
,
也可以是 MCRYPT_ciphername
常量。
調(diào)用 mcrypt_module_close() 函數(shù)可以關(guān)閉模塊。
algorithm
MCRYPT_ciphername
常量中的一個(gè),或者是字符串值的算法名稱。
algorithm_directory
algorithm_directory
參數(shù)指示加密模塊的位置。
如果你提供此參數(shù),則使用你指定的值。
如果將此參數(shù)設(shè)置為空字符串(""
),將使用
php.ini 中的 mcrypt.algorithms_dir
。
如果不指定此參數(shù),則使用 libmcrypt 的編譯路徑
(通常是 /usr/local/lib/libmcrypt)。
mode
MCRYPT_MODE_modename
常量中的一個(gè),或以下字符串中的一個(gè):"ecb","cbc","cfb","ofb","nofb" 和 "stream"。
mode_directory
algorithm_directory
參數(shù)指示加密模式的位置。
如果你提供此參數(shù),則使用你指定的值。
如果將此參數(shù)設(shè)置為空字符串(""
),將使用
php.ini 中的 mcrypt.modes_dir
。
如果不指定此參數(shù),則使用 libmcrypt 的編譯路徑
(通常是 /usr/local/lib/libmcrypt)。
成功則返回加密描述符,如果發(fā)生錯(cuò)誤則返回 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', '');
?>
例程中的第一行從默認(rèn)目錄打開 DES
加密算法,
從 /usr/lib/mcrypt-modes 目錄打開
ECB
模式。
第二個(gè)示例中,使用字符串形式表示算法和模式,
這種形式僅適用于 libmcrypt 2.4.x 或 2.5.x 版本。
示例 #2 在加密中使用 mcrypt_module_open()
<?php
/* 打開加密算法和模式 */
$td = mcrypt_module_open('rijndael-256', '', 'ofb', '');
/* 創(chuàng)建初始向量,并且檢測(cè)密鑰長(zhǎng)度。
* Windows 平臺(tái)請(qǐng)使用 MCRYPT_RAND。 */
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
$ks = mcrypt_enc_get_key_size($td);
/* 創(chuàng)建密鑰 */
$key = substr(md5('very secret key'), 0, $ks);
/* 初始化加密 */
mcrypt_generic_init($td, $key, $iv);
/* 加密數(shù)據(jù) */
$encrypted = mcrypt_generic($td, 'This is very important data');
/* 結(jié)束加密,執(zhí)行清理工作 */
mcrypt_generic_deinit($td);
/* 初始化解密模塊 */
mcrypt_generic_init($td, $key, $iv);
/* 解密數(shù)據(jù) */
$decrypted = mdecrypt_generic($td, $encrypted);
/* 結(jié)束解密,執(zhí)行清理工作,并且關(guān)閉模塊 */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
/* 顯示文本 */
echo trim($decrypted) . "\n";
?>