Привет! Есть файл, закодированный с помощью 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. Или я должен на вход дешифровщика подавать куски того же размера, что и на выходе шифровщика (это работает - проверено опытным путем)? Размер при этом естественно может быть переменным.