⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crypt.pm

📁 这个社区是虚拟社区使用的程序
💻 PM
📖 第 1 页 / 共 2 页
字号:
	0x00401081, 0x00001001, 0x00001080, 0x00000000,	0x00400000, 0x00400081, 0x00000081, 0x00401000,	0x00000001, 0x00401080, 0x00401000, 0x00000081,	0x00400081, 0x00001000, 0x00001001, 0x00401081,	0x00000000, 0x00400080, 0x00400001, 0x00001080,	0x00401001, 0x00001081, 0x00401080, 0x00000001,	0x00001081, 0x00401001, 0x00000080, 0x00400000,	0x00001081, 0x00401000, 0x00401001, 0x00000081,	0x00001000, 0x00000080, 0x00400000, 0x00401001,	0x00400081, 0x00001081, 0x00001080, 0x00000000,	0x00000080, 0x00400001, 0x00000001, 0x00400080,	0x00000000, 0x00400081, 0x00400080, 0x00001080,	0x00000081, 0x00001000, 0x00401081, 0x00400000,	0x00401080, 0x00000001, 0x00001001, 0x00401081,	0x00400001, 0x00401080, 0x00401000, 0x00001001,);my @SPtrans7 =(	# nibble 7	0x08200020, 0x08208000, 0x00008020, 0x00000000,	0x08008000, 0x00200020, 0x08200000, 0x08208020,	0x00000020, 0x08000000, 0x00208000, 0x00008020,	0x00208020, 0x08008020, 0x08000020, 0x08200000,	0x00008000, 0x00208020, 0x00200020, 0x08008000,	0x08208020, 0x08000020, 0x00000000, 0x00208000,	0x08000000, 0x00200000, 0x08008020, 0x08200020,	0x00200000, 0x00008000, 0x08208000, 0x00000020,	0x00200000, 0x00008000, 0x08000020, 0x08208020,	0x00008020, 0x08000000, 0x00000000, 0x00208000,	0x08200020, 0x08008020, 0x08008000, 0x00200020,	0x08208000, 0x00000020, 0x00200020, 0x08008000,	0x08208020, 0x00200000, 0x08200000, 0x08000020,	0x00208000, 0x00008020, 0x08008020, 0x08200000,	0x00000020, 0x08208000, 0x00208020, 0x00000000,	0x08000000, 0x08200020, 0x00008000, 0x00208020);my @cov_2char =(	0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 	0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 	0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 	0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 	0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 	0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 	0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 	0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A);sub ushr  # only for ints!{	my ($n, $s) = @_;	$s &= 0x1f;	return( ($n >> $s) & (~0 >> $s) );}sub toByte{	my $value = shift;	$value &= 0xff;	$value = - ((~$value & 0xff) + 1) if ($value & 0x80);	return $value;}sub toInt{	my $value = shift;	$value = - ((~$value & 0xffffffff) + 1) if ($value & 0x80000000);	return $value;}sub byteToUnsigned # int byteToUnsigned(byte b){	my $value = shift;	return( $value >= 0 ? $value : $value + 256 );}sub fourBytesToInt # int fourBytesToInt(byte b[], int offset){	my ($b, $offset) = @_;	my $value;	$value  =  byteToUnsigned($b->[$offset++]);	$value |= (byteToUnsigned($b->[$offset++]) <<  8);	$value |= (byteToUnsigned($b->[$offset++]) << 16);	$value |= (byteToUnsigned($b->[$offset++]) << 24);	return toInt($value);}sub intToFourBytes # void intToFourBytes(int iValue, byte b[], int offset){	my ($iValue, $b, $offset) = @_;	$b->[$offset++] = toByte(ushr($iValue, 0) & 0xff);	$b->[$offset++] = toByte(ushr($iValue, 8) & 0xff);	$b->[$offset++] = toByte(ushr($iValue,16) & 0xff);	$b->[$offset++] = toByte(ushr($iValue,24) & 0xff);	return undef;}sub PERM_OP # void PERM_OP(int a, int b, int n, int m, int results[]){	my ($a, $b, $n, $m, $results) = @_;	my $t;	$t = (ushr($a,$n) ^ $b) & $m;	$a ^= $t << $n;	$b ^= $t;	$results->[0] = toInt($a);	$results->[1] = toInt($b);	return undef;}sub HPERM_OP # void HPERM_OP(int a, int n, int m){	my ($a, $n, $m) = @_;	my $t;	$t = (($a << (16 - $n)) ^ $a) & $m;	$a = $a ^ $t ^ ushr($t, 16 - $n);	return toInt($a);}sub des_set_key # int [] des_set_key(byte key[]){	my ($key) = @_;	my @schedule; $#schedule = $ITERATIONS * 2 -1;	my $c = fourBytesToInt($key, 0);	my $d = fourBytesToInt($key, 4);	my @results; $#results = 1;	PERM_OP($d, $c, 4, 0x0f0f0f0f, \@results);	$d = $results[0]; $c = $results[1];	$c = HPERM_OP($c, -2, 0xcccc0000);	$d = HPERM_OP($d, -2, 0xcccc0000);	PERM_OP($d, $c, 1, 0x55555555, \@results);	$d = $results[0]; $c = $results[1];	PERM_OP($c, $d, 8, 0x00ff00ff, \@results);	$c = $results[0]; $d = $results[1];	PERM_OP($d, $c, 1, 0x55555555, \@results);	$d = $results[0]; $c = $results[1];	$d = (    (($d & 0x000000ff) << 16) |     ($d & 0x0000ff00)  |	       ushr($d & 0x00ff0000,    16) | ushr($c & 0xf0000000, 4));	$c &= 0x0fffffff;	my ($s, $t);	my ($i, $j);	$j = 0;	for($i = 0; $i < $ITERATIONS; $i++)	{		if($shifts2[$i])		{			$c = ushr($c, 2) | ($c << 26);			$d = ushr($d, 2) | ($d << 26);		}		else		{			$c = ushr($c, 1) | ($c << 27);			$d = ushr($d, 1) | ($d << 27);		}		$c &= 0x0fffffff;		$d &= 0x0fffffff;		$s = $skb0[     ($c   ) & 0x3f                        ]|		     $skb1[(ushr($c, 6) & 0x03) | (ushr($c, 7) & 0x3c)]|		     $skb2[(ushr($c,13) & 0x0f) | (ushr($c,14) & 0x30)]|		     $skb3[(ushr($c,20) & 0x01) | (ushr($c,21) & 0x06) |		                                  (ushr($c,22) & 0x38)];		$t = $skb4[     ($d   ) & 0x3f                         ]|		     $skb5[(ushr($d, 7) & 0x03) | (ushr($d, 8) & 0x3c) ]|		     $skb6[ ushr($d,15) & 0x3f                         ]|		     $skb7[(ushr($d,21) & 0x0f) | (ushr($d,22) & 0x30)];		$schedule[$j++] = (    ($t << 16) | ($s & 0x0000ffff)) & 0xffffffff;		$s              = (ushr($s,   16) | ($t & 0xffff0000));		$s              = ($s << 4) | ushr($s,28);		$schedule[$j++] = $s & 0xffffffff;	}	return \@schedule;}sub D_ENCRYPT # int D_ENCRYPT(int L, int R, int S, int E0, int E1, int s[]){	my ($L, $R, $S, $E0, $E1, $s) = @_;	my ($t, $u, $v);	$v = $R ^ ushr($R,16);	$u = $v & $E0;	$v = $v & $E1;	$u = ($u ^ ($u << 16)) ^ $R ^ $s->[$S];	$t = ($v ^ ($v << 16)) ^ $R ^ $s->[$S + 1];	$t = ushr($t, 4) | ($t << 28);	$L ^= $SPtrans1[    ($t    ) & 0x3f] |	      $SPtrans3[ushr($t,  8) & 0x3f] |	      $SPtrans5[ushr($t, 16) & 0x3f] |	      $SPtrans7[ushr($t, 24) & 0x3f] |	      $SPtrans0[    ($u    ) & 0x3f] |	      $SPtrans2[ushr($u,  8) & 0x3f] |	      $SPtrans4[ushr($u, 16) & 0x3f] |	      $SPtrans6[ushr($u, 24) & 0x3f];	return $L;}sub body # int [] body(int schedule[], int Eswap0, int Eswap1){	my ($schedule, $Eswap0, $Eswap1) = @_;	my $left  = 0;	my $right = 0;	my $t     = 0;	my ($i, $j);	for($j = 0; $j < 25; $j++)	{		for($i = 0; $i < $ITERATIONS * 2; $i += 4)		{			$left  = D_ENCRYPT($left,  $right, $i,     $Eswap0, $Eswap1, $schedule);			$right = D_ENCRYPT($right, $left,  $i + 2, $Eswap0, $Eswap1, $schedule);		}		$t     = $left; 		$left  = $right; 		$right = $t;	}	$t = $right;	$right = ushr($left, 1) | ($left << 31);	$left  = ushr($t   , 1) | ($t    << 31);	$left  &= 0xffffffff;	$right &= 0xffffffff;	my @results; $#results = 1;	PERM_OP($right, $left, 1, 0x55555555, \@results); 	$right = $results[0]; $left = $results[1];	PERM_OP($left, $right, 8, 0x00ff00ff, \@results); 	$left = $results[0]; $right = $results[1];	PERM_OP($right, $left, 2, 0x33333333, \@results); 	$right = $results[0]; $left = $results[1];	PERM_OP($left, $right, 16, 0x0000ffff, \@results);	$left = $results[0]; $right = $results[1];	PERM_OP($right, $left, 4, 0x0f0f0f0f, \@results);	$right = $results[0]; $left = $results[1];	my @out; $#out = 1;	$out[0] = $left; $out[1] = $right;	return \@out;}sub crypt # String crypt(String original, String salt){	my ($original, $salt) = @_;	while(length($salt) < 2)	{		$salt .= 'A';	}	my $buffer = '';	substr($buffer,0,2) = substr($salt,0,2);	my $Eswap0 = $con_salt[ord(substr($salt,0,1))];	my $Eswap1 = $con_salt[ord(substr($salt,1,1))] << 4; 	my @key; $#key = 7;	for(0 .. @key)	{		$key[$_] = 0;	}	my $i;	my @iChar = map { ord($_) << 1 } split(//, $original);	for($i = 0; $i < @key && $i < @iChar; $i++)	{		$key[$i] = toByte($iChar[$i]);	}	my $schedule = des_set_key(\@key);	my $out      = body($schedule, $Eswap0, $Eswap1);	my @b; $#b = 8;	intToFourBytes($out->[0], \@b, 0);	intToFourBytes($out->[1], \@b, 4);	$b[8] = 0;	my ($j, $c, $y, $u);	for($i = 2, $y = 0, $u = 0x80; $i < 13; $i++)	{		for($j = 0, $c = 0; $j < 6; $j++)		{			$c <<= 1;			$c |= 1 if (($b[$y] & $u) != 0);			$u >>= 1;			if($u == 0)			{				$y++;				$u = 0x80;			}		}		$buffer .= chr($cov_2char[$c]);	}	return $buffer;}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -