Проблема PHP mycrypt, странные символы / предупреждения - PullRequest
2 голосов
/ 21 мая 2009

Понятия не имею, что я делаю не так. Мне просто нужно иметь возможность шифровать и расшифровывать, не получая странных символов или предупреждений. В нем говорится, что я должен использовать IV длины 16 и что я использую длину 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;

?>

Может ли кто-то указать мне правильное направление или указать, что я делаю неправильно?

Спасибо

Mike

Ответы [ 2 ]

2 голосов
/ 21 мая 2009

CIPHER_IV, вероятно, является неопределенной константой. PHP генерирует уведомление «Использование неопределенной константы», а затем использует «константу» как строку Строка "CIPHER_IV" имеет длину 9 символов.

1 голос
/ 21 мая 2009

В вашем php-файле распечатайте CIPHER_IV и посмотрите, что в нем содержится.

См. http://us2.php.net/mcrypt_generic_init для уточнения

Вы, вероятно, скопировали код из блога: googling mcrypt_generic_init CIPHER_IV предоставляет только этот пост и блог;)

IV - это параметр, который вам нужно указать для функции, а не константа, которую первый блоггер неверно истолковал в статье второго блоггера.

В http://propaso.com/blog/?cat=6, они заявляют следующее:

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

и затем сделайте:

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

Просто объявите ваш IV как что-то, а затем используйте его.

...