|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrey Sapozhnikov 2:5020/400 03 Dec 2002 22:32:26 To : vilfred Subject : Re: ну эта -------------------------------------------------------------------------------- vilfred wrote: > tim пишет: > >>А я с шифрованием совсем не знаком. Подскажи >>ключевые слова, чтоб хоть >>направление знал куда копать :-) > > умножил на 3,14159 > разделил на 2,718281828459045289 > > Короче берешь на случайное число умножаешь и в следющем действии юзера > делишь. или сдвигаешь на байт влево или вправо. Криптостойкость подобного "шифра" в общем случае будет чрезвычайно низка. Достаточно отметить, не проводя дополнительного анализа стойкости, что данный "шифр" абсолютно не отвечает принципу Кирхгофа. А последовательность арифметических операций умножения и деления вообще бессмысленна по той причине, что (x * k1) / k2 = x * (k1 / k2), где константное значение k1/k2 и будет являться ключом данного "шифра". Я бы хотел отметить, что создание новых стойких алгоритмов шифрования исключительно сложный процесс, требующий большого объема математичиских доказательств и если только Вы не специалист в области криптографии, то заниматься подобным не только бесполезно, но и вредно в силу создания иллюзий защищенности системы. Лучше воспользоваться готовыми проверенными алгоритмами криптования, хотя для того, чтоб их грамотно применить вме равно нужны базовые знания в области криптографии. Применительно к Perl я рекомендовал бы использовать Crypt::Rijndael (Rijndael cipher, now AES) Crypt::Rijndael_PP (pure-perl implementation) Crypt::GOST (ГОСТ 28147-89) Crypt::GOST_PP (pure-perl implementation) Crypt::Twofish2 Crypt::IDEA в большинстве случаев вместе с модулем Crypt::CBC и в качестве асиммметричных алгоритмов: Crypt::DSA Crypt::RSA впрочем, для данной задачи они не нужны. Приблизительная схема использования шифрования в данной задаче (упрощенно-схематически): 1. Создание криптованного сообщения самому себе. use Crypt::CBC; my $plaintext = (time() + 180) . "&$param1&$param2"; my $cipher = Crypt::CBC->new( { 'key' => 't0p $eKreT |<eY', 'cipher' => 'Rijndael' } ); my $ciphertext = $cipher->encrypt_hex($plaintext); print "window.open('my_perl_script.cgi?p=$ciphertext', ", "'mywin', 'height=200, width=300');\n"; 2. Получение сообщения, декриптование, проверка валидности. use CGI; use Crypt::CBC; use MIME::Base64; my $ciphertext = param('p') or die "mandatory parameter not passed"; my $cipher = Crypt::CBC->new( { 'key' => 't0p $eKreT |<eY', 'cipher' => 'Rijndael' } ); my $plaintext = $cipher->decrypt_hex($ciphertext) or die "decryption failed"; $plaintext =~ /^(\d+)&(\w+)&(\w+)$/ or die "validation failed\n"; time() <= $1 or die "parameter expired"; my ($param1, $param2) = ($2, $3); В данном случае модуль Crypt::CBC решает за нас несколько задач - дополнение ключа и данных до размера блока требуемого данному алгоритму криптования, генерацию случайного IV (начального вектора), криптование и упаковку результата в строку. Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/6577bfab9bfa.html, оценка из 5, голосов 10
|