В связи с неактуальностью (вариант с флешкой недавно был заменён упрощенным вариантом на javascript), публикую перевод этого шедевра на PERL:
#---- uncript 2 pass -----------------------------------------------
my $r=1244201195.28292;
my $pas='1111';
#-------------------------------------------------------------------
my @initKey = (232, 179, 9, 49, 17, 182, 147, 22, 67, 153, 48, 202, 41, 89, 251, 31);
my @hex = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
#-------------------------------------------------------------------
sub rijndael
{
my (@src,@ikey);
my ($src,$ikey)=@_;
@src=@$src;
@ikey=@$ikey;
my @sBox = (99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 200, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 50, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22);
my @rCon = (1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108);
my @w;
my @tar;
my @b;
my $i = 0;
my $j = 0;
my $k = 0;
my $l = 0;
my @tmp;
for($i=0; $i<4; $i++)
{
for($j=0; $j<4; $j++)
{
@w[$i*4+$j] = @ikey[$i*4+$j];
} # end of for
} # end of for
for ($i=1; $i<11; $i++)
{
for ($j=0; $j<4; $j++)
{
for ($k=0; $k<4; $k++)
{
@b[$k] = @w[($i - ($j == 0) ? (1) : (0)) * 16 + $k * 4 + ($j == 0 ? (3) : ($j - 1))];
} # end of for
if ($j == 0)
{
for ($k=0; $k<4; $k++)
{
if ($k<3)
{
@b[$k] = @sBox[@b[$k + 1]];
next;
} # end if
@b[$k] = @sBox[0] ^ @rCon[$i];
} # end of for
} # end if
for ($k=0; $k<4; $k++)
{
@w[$i * 16 + $k * 4 + $j] = @w[($i - 1) * 16 + $k * 4 + $j] ^ @b[$k];
} # end of for
} # end of for
} # end of for
for ($i = 0; $i < 4; $i++)
{
for ($j = 0; $j < 4; $j++)
{
@tar[$i * 4 + $j] = @src[$i * 4 + $j] ^ @w[$i * 4 + $j];
} # end of for
} # end of for
for ($i = 1; $i < 4; $i++)
{
for ($l = 0; $l < $i; $l++)
{
@tmp = @tar[$i * 4];
for ($j = 0; $j < 3; $j++)
{
@tar[$i * 4 + $j] = @tar[$i * 4 + ($j + 1) % 4];
} # end of for
@tar[$i * 4 + 3] = @tmp;
} # end of for
} # end of for
if ($k != 9)
{
for ($j = 0; $j < 4; $j++)
{
for ($i = 0; $i < 4; $i++)
{
my $tmp = @tar[$i * 4 + $j] ^ @tar[($i + 1) % 4 * 4 + $j];
@b[$i] = @tar[($i + 1) % 4 * 4 + $j] ^ @tar[($i + 2) % 4 * 4 + $j] ^ @tar[($i + 3) % 4 * 4 + $j] ^ ($tmp > 127 ? ($tmp << 1 ^ 283) : ($tmp << 1));
} # end of for
for ($i = 0; $i < 4; $i++)
{
@tar[$i * 4 + $j] = @b[$i];
} # end of for
} # end of for
} # end if
for ($i = 0; $i < 4; $i++)
{
for ($j = 0; $j < 4; $j++)
{
@tar[$i * 4 + $j] = @tar[$i * 4 + $j] ^ @w[($k + 1) * 16 + $i * 4 + $j];
} # end of for
} # end of for
my $tar;
foreach(@tar){
if($tar>0){
$tar="$tar $_";
}
else{
$tar="$_";
}
}
return ($tar);
} # End of the function
#------------------------------------------------------------------------------
sub md5
{
my @src=split(//,@_[0]);
my @tar=('','','','','','','','','','','','','','','','');
my @res=('','','','','','','','','','','','','','','','');
my ($i,$j);
my $srclength=(@src);
for ($i = 0; $i < $srclength || $i < 16; $i++)
{
# @res[$i] = Number(@src.charCodeAt($i)) ^ $i * 4;
@res[$i]=ord((@src)[$i]) ^ $i * 4;
} # end of for
for ($i = 0; $i < 4; $i++)
{
for ($j = 0; $j < 4; $j++)
{
@tar[$i * 4 + $j] = (@res[$j * 4 + $i] + 256) % 256;
} # end of for
} # end of for
return (@tar);
} # End of the function
#------------------------------------------------------------------------------
sub array2HStr
{
my @src = split(/ /,@_[0]);
my $tmres;
my @res = "";
my $i;
for ($i = 0; $i < 16; $i++)
{
$tmres=sprintf ("%X", @src[$i]);
if (length($tmres)==1){$tmres="0$tmres"};
@res="@res$tmres";
} # end of for
return (@res);
} # End of the function
#------------------------------------------------------------------------------
#------------------ work -------------------
my @ikey = md5($pas);
my @md5 = md5($r);
my ($i,$j);
for ($i = 0; $i < 4; $i++)
{
for ($j = 0; $j < 4; $j++)
{
@ikey[$i * 4 + $j] = @ikey[$i * 4 + $j] ^ @initKey[$i * 4 + $j];
} # end of for
} # end of for
my @rijndael = rijndael(\@md5, \@ikey);
my @array2HStr=array2HStr(@rijndael);
print"pass = $pas<br>r = $r<hr>";
print"Code = @array2HStr<br>";
#------------- end of work -----------------
#----- end uncript 2 pass ----------------------