mdecrypt_generic

(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)

mdecrypt_genericデータを復号する

警告

この関数は PHP 7.1.0 で 非推奨になります。この関数に頼らないことを強く推奨します。

説明

mdecrypt_generic ( resource $td , string $data ) : string

この関数は、データを復号します。データのパディングが行われるため、 返される文字列の長さは暗号化前の文字列よりも長くなる可能性があることに 注意してください。

パラメータ

td

mcrypt_module_open() が返す暗号化記述子。

data

暗号化されたデータ。

例1 mdecrypt_generic() の例

<?php
    
/* データ */
    
$key 'this is a very long key, even too long for the cipher';
    
$plain_text 'very important data';

    
/* モジュールをオープンし、IV を作成します */ 
    
$td mcrypt_module_open('des''''ecb''');
    
$key substr($key0mcrypt_enc_get_key_size($td));
    
$iv_size mcrypt_enc_get_iv_size($td);
    
$iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);

    
/* 暗号化ハンドルを初期化します */
    
if (mcrypt_generic_init($td$key$iv) != -1) {

        
/* データを暗号化します */
        
$c_t mcrypt_generic($td$plain_text);
        
mcrypt_generic_deinit($td);

        
/* 復号のため、バッファを再度初期化します */
        
mcrypt_generic_init($td$key$iv);
        
$p_t mdecrypt_generic($td$c_t);

        
/* 後始末をします */
        
mcrypt_generic_deinit($td);
        
mcrypt_module_close($td);
    }

    if (
strncmp($p_t$plain_textstrlen($plain_text)) == 0) {
        echo 
"ok\n";
    } else {
        echo 
"error\n";
    }
?>

上記の例は、暗号化前のデータと復号したデータと同じであるかどうかを 調べる方法を示すものです。データを復号する前に mcrypt_generic_init() で暗号化バッファを再度 初期化しておくことが重要です。

この関数をコールする前に、常に mcrypt_generic_init() でキーと IV を使用して 復号ハンドルを初期化しておくべきです。暗号化が終了した際には mcrypt_generic_deinit() をコールして暗号化 バッファを開放すべきです。 mcrypt_module_open() の例を参照ください。

参考