Я пытаюсь написать 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. Я думаю, что я ближе, но просто чего-то не хватает. У кого-нибудь есть какие-либо идеи. Я уверен, что оценил бы это!
Задача ещё не решена.
Других решений пока нет …