Encryption Crypt — несоответствие PHP и Perl для CFB Rijndael

Я пытаюсь написать Perl-код, который соответствует следующему фрагменту кода PHP:

<?php

$key = 'dd7b47ad2d87b93013a89878fef3f6c5';
$str = 'Hello this is my sensative text string for testing';
$iv = '1234123412341234';

$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CFB, $iv);
list(,$ciphertext_h) = unpack('H*', $ciphertext );
echo $ciphertext_h . "\n";

?>

Когда я запускаю этот код, я получаю следующую строку шифра:

67a15d847220b5417263724032e8981366fb92ae73db1a88edf16da54fe81ac056a2a4c7f9e1f335467d7bf16d6bafe49341

Я попытался использовать полдюжины различных модулей Perl, включая Crypt :: CFB, Crypt :: GCrypt и Crypt :: Rijndael. Я уверен, что несоответствие происходит, потому что варианты не совпадают. Я изо всех сил пытаюсь установить параметры правильно. Я попробовал вот что:

use Crypt::CFB;

my $key = 'dd7b47ad2d87b93013a89878fef3f6c5';
my $iv = "1234123412341234";
my $str = "Hello this is my sensative text string for testing";

my $cipher = Crypt::CFB->new($key, 'Crypt::Rijndael', $iv);
my $cipherStr = $cipher->encrypt($str);
print(unpack( 'H*', $cipherStr ) . "\n" );

Который производит следующий зашифрованный текст:

af129a803585990d2887307361d8ce451ec4fce94fb031b15e570d2ee818ab34b030189676171e7dd5fa74a517470fae08eb

Я не могу изменить ни один из параметров Crypt :: CFB. Когда я пытаюсь, я получаю ошибки инстанцирования …

Я также дал Crypt :: Rijndael попробовать:

use Crypt::Rijndael;

my $key = 'dd7b47ad2d87b93013a89878fef3f6c5';
my $iv = "1234123412341234";
my $str = "Hello this is my sensative text string for testing";

# pad the $str to a multiple of 16 bytes:
if (my $distance = length($str) % 16) {
$str .= "\0" x (16 - $distance);
}

my $crypt = Crypt::Rijndael->new($key, Crypt::Rijndael::MODE_CFB);
$crypt->set_iv($iv);
my $binary = $crypt->encrypt($str);
print(  unpack( 'H*', $binary ) . "\n" );

Который производит следующий зашифрованный текст:

6746b5e4bdde2888f0b2da506176669e846c11a94ca425b4f8b92363030fac374cb9dd7d3a68a740d284530c025d17c0de06ff96563b40cda5deea0324d754a9

Текст шифра длиннее, потому что я должен был дополнить данные. Я получил ошибку, если данные не были дополнены. По-прежнему нет совпадения с кодом PHP. Я думаю, что я ближе, но просто чего-то не хватает. У кого-нибудь есть какие-либо идеи. Я уверен, что оценил бы это!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …