2

何が間違っているのかわかりません。奇妙な文字や警告を表示せずに暗号化および復号化できる必要があります。長さ 16 の IV を使用することになっており、長さ 9 を使用しているが、「0123456789abcdef」は 16 文字です。

警告: mcrypt_generic_init() [function.mcrypt-generic-init]: Iv サイズが正しくありません。指定された長さ: 9、必要: 16 /home/mcondiff/public_html/projects/enc/enc.php の 10 行目

http://www.teamconcept.org/projects/enc/enc.phpを参照してください。

私は途方に暮れ、混乱し、少し頭がクラクラします。ここから行こうか?この暗号化を使用して、プロジェクトで機能させる必要があります。

<?php

class enc
{
    function encrypt($str, $key) {
        $key = $this->hex2bin($key);

        $td = mcrypt_module_open("rijndael-128", "", "cbc", "fedcba9876543210");

        mcrypt_generic_init($td, $key, CIPHER_IV);
        $encrypted = mcrypt_generic($td, $str);

        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);

        return bin2hex($encrypted);
    }

    function decrypt($code, $key) {
        $key = $this->hex2bin($key);
        $code = $this->hex2bin($code);

        $td = mcrypt_module_open("rijndael-128", "", "cbc", "fedcba9876543210");

        mcrypt_generic_init($td, $key, CIPHER_IV);
        $decrypted = mdecrypt_generic($td, $code);

        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);

        return utf8_encode(trim($decrypted));
    }

    function hex2bin($hexdata) {
        $bindata = "";

        for ($i = 0; $i < strlen($hexdata); $i += 2) {
            $bindata .= chr(hexdec(substr($hexdata, $i, 2)));
        }

        return $bindata;
    }

}

$theEncryption = new enc();
$user = "John Doe";
$email = "john@example.com";
$user = $theEncryption->encrypt($user, "0123456789abcdef");

$email = $theEncryption->encrypt($email, "0123456789abcdef");

echo 'User: '.$user;
echo 'Email: '.$email;

?>

誰かが私を正しい方向に向けたり、私が間違っていることを指摘したりできますか?

ありがとう

マイク

4

2 に答える 2

2

CIPHER_IVはおそらく未定義の定数です。PHPは、「未定義の定数の使用」通知を発行し、「定数」を文字列として使用します。文字列「CIPHER_IV」の長さは9文字です。

于 2009-05-21T17:10:17.707 に答える
1

PHP ファイルで CIPHER_IV を出力し、その内容を確認します。

詳細については、http: //us2.php.net/mcrypt_generic_initを参照してください。

ブログからコードをコピーして貼り付けた可能性があります: mcrypt_generic_init CIPHER_IV をググると、この投稿とブログしか表示されません ;)

IV は関数に指定する必要があるパラメーターであり、最初のブロガーが 2 番目のブロガーの記事を誤解して入れた定数ではありません。

http://propaso.com/blog/?cat=6では、次のように宣言しています。

$secret_key = "01234567890abcde";
$iv         = "fedcba9876543210";

そして、次のようにします。

mcrypt_generic_init($td, $secret_key, $iv);

IVが何かであることを宣言してから、それを使用してください。

于 2009-05-21T17:20:01.820 に答える