package Secure; use strict; use vars qw(@ISA @EXPORT $Q); use CGI; my $q= new CGI; $Q= $q; use Digest::MD5 qw(md5_hex); use Exporter; @ISA= qw(Exporter); @EXPORT= qw($Q); #################################### êîäîâîå ñëîâî my $code= 'Masha'; #òîëüêî öèôðû, àíãëèéñêèå áóêâû è ñïåöñèìâîëû êëàâèàòóðû; äëèíà êîäîâîãî ñëîâà íåîãðàíè÷åíà #################################### my $chars= " \n !\"#\$%&'()*+,-./0123456789:;<=>?\@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~¹ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ¨¥²¯ª¡¸´³¿º¢–—«»°…"; #íàáîð äîïóñòèìûõ ñèìâîëîâ my @charM= split"", $chars; my $p= $q->param("Q"); if( $p=~ /^[0-9a-f]+$/i ) { $p=~ s/^([a-f0-9]{16})//i; my @txt= split"", $p; my( $rnd, $i, $ii, $strO, $str, @md5 )=( $1, 0, 0, "", "" ); for( @txt ) #äåøèôðîâàíèå { if( $ii%32==0 ) { @md5= split"", md5_hex($rnd.$code.$i); $i++; } $strO.= _sumRev($_, $md5[$ii%32]); if( $ii%2==1 ){ $str.= $charM[hex($strO)]; $strO= ""; } $ii++; } for( split/&/, $str ) #çàïèñü â ïàðàìåòðû { my @sp= split"=", $_; $sp[1]=~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; $Q->append( -name=> $sp[0], -values=> $sp[1] ); } if( $Q->param("test") ne "test" ) #äåéñòâèå, åñëè êîäîâîå ñëîâî íåïðàâèëüíîå { print $q->header( -charset=> "windows-1251" ); print "Ââåäèòå ïðàâèëüíîå êîäîâîå ñëîâî åù¸ ðàç!"; print ""; exit(0); } } sub _sumRev #äåìàñêèðîâàíèå { my( $ap, $bp )=( hex($_[0]), hex($_[1]) ); my $s= $ap<$bp ? 16+$ap-$bp : $ap-$bp; return sprintf("%x", $s); } 1;