Blowfish декодирует из строки

Используя режим bbc blowfish, я хочу создать зашифрованный токен. Когда я создаю токен и сразу его расшифровываю, он работает правильно. Однако, если я помещу зашифрованный токен в SESSION и попытаюсь расшифровать его во время последующего запроса, расшифровка выдаст мусор.

Это мой код. Я использую SESSION для тестирования; в конце концов, вместо этого я буду хранить эти строки в базе данных.

session_start();
define("key","v8nga4r76qlipm111jnioool");
define("iv",substr(md5(uniqid(rand(),1)),0,8));
require_once("Crypt/Blowfish.php");

$str = "Blowfish_test";
// encode start!!
$blowfish = Crypt_Blowfish::factory("cbc", key, iv);
$encrypt = $blowfish->encrypt($str);
$encrypt64 = base64_encode($encrypt);
$_SESSION["test"] = $encrypt64;

Пока все правильно. Если по этому же запросу сразу декодировать (из SESSION), то результаты ожидаемые:

// decode start!!
$blowfish = Crypt_Blowfish::factory("cbc", key, iv);
$decrypt64 = base64_decode($_SESSION["test"]);
$decrypt = $blowfish->decrypt($decrypt64);
$trim_decrypt = rtrim($decrypt, "\0");
echo "Before encryption : " . $str ."<br>";
echo "Encrypted string &nbsp&nbsp: " .$encrypt64. "<br>";
echo "decrypted string &nbsp&nbsp: " .$trim_decrypt. "<br>";

Если я помещу только второй блок кода на другую страницу (таким образом, ранее сгенерированная строка будет расшифрована), расшифрованная строка окажется мусором.

Шифрование -> сеанс["тест"] -> Расшифровка --- без проблем

session["test"] -> Расшифровка --- проблема

Что тут происходит?


person Ballsigno    schedule 27.06.2012    source источник
comment
Гм, вы определяете iv, который, как я полагаю, является вашим вектором инициализации, как большой случайный блок для каждого запроса. Он должен быть одинаковым для всех запросов. И, пожалуйста, не включайте видео с YouTube в свои вопросы. Мы вам верим, нам не нужны видеодоказательства описанных вами симптомов.   -  person meagar    schedule 28.06.2012
comment
Прежде всего, спасибо за перевод. По вашему мнению, я смог решить проблему. Как вы говорите, значения вектора инициализации должны были быть расшифрованы с одним и тем же значением. Я смог решить проблему, и спасибо!! Так что это может быть полезно для кого-то, я добавляю код   -  person Ballsigno    schedule 28.06.2012


Ответы (1)


Прошу прощения за эту суперзадержку. Я решил эту проблему с помощью комментария в то время, поэтому я закрываю этот вопрос, используя вики сообщества.

--- добавить ---
проблема решена

// encode
// At the same time save the initialization vector
$_SESSION["test"] = $encrypt64;
$_SESSION["iv"]   = iv;

--- other file ---
// decode
$blowfish = Crypt_Blowfish::factory("cbc", key, $_SESSION["iv"]);
person Community    schedule 23.07.2018