Одна из задач, которую я должен выполнить, заключается в том, чтобы я зашифровал что-то со стороны PHP, а затем расшифровал это с помощью Perl.
Модуль PEAR , который я нашел и который подходит для моих нужд, был Crypt_CBC. Однако должно быть что-то, что я делаю неправильно или не понимаю, так как до сих пор не смог добиться правильных результатов.
Приведенные ниже выдержки из кода специально предназначены для целей тестирования, так как я хотел все это попробовать, прежде чем применять его к коду моего реального проекта.
Во-первых, вот мой PHP-код, с помощью которого я шифрую все, что передается параметру $ text (т.е. cryptTest.php? Text = hello)
require_once('Crypt/CBC.php');
$key = "8326554161EB30EFBC6BF34CC3C832E7CF8135C1999603D4022C031FAEE";
$cipher = new Crypt_CBC($key, 'BLOWFISH');
$encrypted = $cipher->encrypt($text);
if (PEAR::isError($encrypted)) {
echo $encrypted->getMessage();
} else {
echo "ENCRYPTED STRING: " . $encrypted;
}
С этого момента я копирую все, что отражено в этом скрипте (в выводе моего браузера), и вставляю его в переменную $ encrypted моего скрипта PERL ниже:
use Crypt::CBC;
$encrypted = "RandomIVá´bp3Ó¯làK”Á(Û";
my $key = "8326554161EB30EFBC6BF34CC3C832E7CF8135C1999603D4022C031FAEE";
my $vector = "\0\0\0\0\0\0\0\0";
my $cipher = Crypt::CBC->new(
{'key' =>$key,
'cipher' => 'Blowfish',
'iv' => $vector,
'prepend_iv' => 0
});
my $plaintext = $cipher->decrypt($encrypted);
print $plaintext;
Я пробовал много вещей, например, не указывал IV на стороне Perl и тому подобное, но он продолжал давать мне ошибки. Эта форма единственная, с которой я получаю какие-либо результаты вообще.
Результат выполнения вышеизложенного с исходным $ text = "hello": Pñšîî7àÐŽZÊ & Rhello
Что я обнаружил, так это то, что мой исходный контент правильно расшифровывается, но не без добавления группы дерьмовых символов перед нужной мне частью.
Может кто-нибудь указать мне на то, что я делаю неправильно, и как я могу это исправить?
Спасибо большое.