質問

私は私が間違ってやっている見当がつかない。私は変な文字や警告を取得せずに暗号化および復号化できるようにする必要があります。それは私が長さ16のIVを使用することになっていると私は9の長さを使用していますが、「0123456789ABCDEF」は16個の文字であることを述べています。

  

警告:てmcrypt_generic_init()function.mcrypt汎用-INIT]:静脈サイズ間違いました。供給された長さ: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;

?>

Somoneのが正しい方向に私を指すか、私が間違ってやっていると指摘することはできますか?

おかげ

マイク

役に立ちましたか?

解決

CIPHER_IVはおそらく未定義の定数です。 PHPは予告「未定義の定数の使用」を提起して、文字列として「定数」を使用しています。文字列 "CIPHER_IV" は9つの文字です。

他のヒント

あなたの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を宣言します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top