Code: Select all
use warnings;
use strict;
use Math::BigInt;
sub decrypt
{
my $holdrand = $_[1];
$holdrand = Math::BigInt->new($holdrand);
my $mulfactor = 0x3498;
my $addfactor = 0x881234;
my $StrLen = $_[0];
my @sequence = ('0','1','2','3','4','5','6','7','8','9');
if ($StrLen >= 1)
{
my $k = 2;
for (my $pos = int 1; $pos < 10; $pos++)
{
$holdrand = $addfactor + $holdrand * $mulfactor & 0xFFFFFFFF;
my $replace_pos = $holdrand % $k;
if ($pos != $replace_pos)
{
my $temp = $sequence[$pos];
$sequence[$pos] = $sequence[$replace_pos];
$sequence[$replace_pos] = $temp;
}
$k++;
}
}
my $pin = $_[2];
my $add = '';
my @pinzim = split('',$pin);
for (my $pos = int 0; $pos<length($pin); $pos++)
{
for (my $i = int 0; $i<10;$i++)
{
if ($pinzim[$pos] eq $sequence[$i])
{
$add = $add.($i+30);
}
}
}
return $add;
}
print decrypt(10,0x124ad78e,2404);