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;