打開演算法和模式對應的模組

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 起廢棄。強烈建議不要使用本函式。

說明

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

範例

示例 #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 版本。

示例 #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";
?>

參見

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *