Используя режим 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   : " .$encrypt64. "<br>";
echo "decrypted string   : " .$trim_decrypt. "<br>";
Если я помещу только второй блок кода на другую страницу (таким образом, ранее сгенерированная строка будет расшифрована), расшифрованная строка окажется мусором.
Шифрование -> сеанс["тест"] -> Расшифровка --- без проблем
session["test"] -> Расшифровка --- проблема
Что тут происходит?
iv
, который, как я полагаю, является вашим вектором инициализации, как большой случайный блок для каждого запроса. Он должен быть одинаковым для всех запросов. И, пожалуйста, не включайте видео с YouTube в свои вопросы. Мы вам верим, нам не нужны видеодоказательства описанных вами симптомов. - person meagar   schedule 28.06.2012