0

TripleDESを使用してデータを暗号化するために、インターネットからコードを入手しました。

$key = "ThisIsTheKey"; // 24 bit Key
$iv = "fYfhHeDm"; // 8 bit IV
$bit_check = 8; // bit amount for diff algor.


//function to encrypt
function encrypt($text) {
    global $key,$iv,$bit_check;
    $text_num = str_split($text, $bit_check);
    $text_num = $bit_check - strlen($text_num[count($text_num) - 1]);
    for ($i = 0; $i < $text_num; $i++) {
        $text = $text . chr($text_num);
    }
    $cipher = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'cbc', '');
    mcrypt_generic_init($cipher, $key, $iv);
    $decrypted = mcrypt_generic($cipher, $text);
    mcrypt_generic_deinit($cipher);
    return base64_encode($decrypted);
}

問題は、変数をグローバルと呼んでも、上部(変数を宣言した場所)に変数が使用されていないことを示しています。これを実行しようとすると、エラーが発生しました。しかし、関数内で同じ変数セットを宣言すると、それは機能します。

4

1 に答える 1

11

一般的な注意として、グローバル変数の使用は強くお勧めしません。あなたの関数を見ると、必要なのは だけですが$text、実際には$text$key$iv、およびが必要$bit_checkです。

グローバルを使わないようにしましょう:

$key = "ThisIsTheKey"; // 24 bit Key
$iv = "fYfhHeDm"; // 8 bit IV
$bit_check = 8; // bit amount for diff algor.


//function to encrypt
function encrypt($text, $key, $iv, $bit_check) {
    $text_num = str_split($text, $bit_check);
    $text_num = $bit_check - strlen($text_num[count($text_num) - 1]);
    for ($i = 0; $i < $text_num; $i++) {
        $text = $text . chr($text_num);
    }
    $cipher = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'cbc', '');
    mcrypt_generic_init($cipher, $key, $iv);
    $decrypted = mcrypt_generic($cipher, $text);
    mcrypt_generic_deinit($cipher);
    return base64_encode($decrypted);
}

そして、それを使用して呼び出します

encrypt("Hello World!", $key, $iv, $bit_check);

もう 1 つの解決策は、CONSTANTS の使用です。キー、iv、および bit_check が実行時間全体を通じて変更されず、それらを定数として定義でき、アプリケーション全体でグローバルに使用可能であり、変更できないと仮定します。

そのようです:

const KEY = "ThisIsTheKey"; // 24 bit Key
const IV = "fYfhHeDm"; // 8 bit IV
const BIT_CHECK = 8; // bit amount for diff algor.


//function to encrypt
function encrypt($text) {
    $text_num = str_split($text, BIT_CHECK);
    $text_num = BIT_CHECK - strlen($text_num[count($text_num) - 1]);
    for ($i = 0; $i < $text_num; $i++) {
        $text = $text . chr($text_num);
    }
    $cipher = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'cbc', '');
    mcrypt_generic_init($cipher, KEY, IV);
    $decrypted = mcrypt_generic($cipher, $text);
    mcrypt_generic_deinit($cipher);
    return base64_encode($decrypted);
}
于 2012-09-25T12:47:27.467 に答える