LINUX.ORG.RU

Вопрос по дешифровке RC4.


0

0

Привет!

Есть файл, закодированный с помощью RC4.
Файл гарантированно валидный.

Я написал простенький дешифровщик на Perl с помощью 
враппера в libgcrypt.
Вот этот скриптик:
###############################################################
#!/usr/local/bin/perl
use strict;
use Crypt::GCrypt;

my $cipher = Crypt::GCrypt->new(
                                 type => 'cipher',
                                 algorithm => 'arcfour', 
                                 mode => 'stream'
                               );

$cipher->start('decrypting');
$cipher->setkey('dima');

binmode STDOUT;
binmode STDIN;

my $size = $ENV{'DECRYPT_SIZE'};

my $buf;
my $rc;
while($rc = sysread(STDIN, $buf, $size))
{
  my $plaintext = $cipher->decrypt($buf);
}
print STDERR "RC = '$rc' ($!)\n" unless defined $rc;
###############################################################

Как видно, размер буфера для чтения задается с помощью переменной
окружения DECRYPT_SIZE.
Далее прочитанный кусок закодированного файла передается в 
библиотечный вызов.

Вот что я получаю при изменении размера буфера чтения от 1 до 9:

krivenok@develop ~/work/misc/crypt $ for ((i=1;i<10;i++)) do export DECRYPT_SIZE=$i && echo "*** $i ***" && cat file.rc4 | ./decoder_test.pl ;  done
*** 1 ***
*** 2 ***
panic: sv_setpvn called with negative strlen at ./decoder_test.pl line 25.
*** 3 ***
*** 4 ***
panic: sv_setpvn called with negative strlen at ./decoder_test.pl line 25.
*** 5 ***
*** 6 ***
*** 7 ***
panic: sv_setpvn called with negative strlen at ./decoder_test.pl line 25.
*** 8 ***
*** 9 ***
krivenok@develop ~/work/misc/crypt $

Для буфера размером 1,3,5,6,8 и 9 байт всё ОК.
А для 2,4 и 7 байт вылезает какая-то ошибка (внутри библиотеки).

Основной вопрос следующий:
Могу ли я подсовывать дешифровщику шифрованный текст кусками любого
размера? Имеется ввиду с точки зрения алгоритма RC4.

Или я должен на вход дешифровщика подавать куски того же размера,
что и на выходе шифровщика (это работает - проверено опытным путем)?
Размер при этом естественно может быть переменным.

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.