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

📄 des.pl

📁 IP网络语音通讯软件源代码. 不可多得的语音源代码
💻 PL
📖 第 1 页 / 共 2 页
字号:
0x00002000, 0x00000004, 0x01000004, 0x01000080,
0x01000000, 0x00002080, 0x01002084, 0x00000000,
0x00002084, 0x01000000, 0x00000080, 0x00002004,
0x01000084, 0x00000080, 0x00000000, 0x01002084,
0x01002004, 0x01002080, 0x00000084, 0x00002000,
0x00002080, 0x01002004, 0x01000080, 0x00000084,
0x00000004, 0x00002084, 0x01002000, 0x01000004,
);
@SP5=(
0x10000008, 0x00040008, 0x00000000, 0x10040400,
0x00040008, 0x00000400, 0x10000408, 0x00040000,
0x00000408, 0x10040408, 0x00040400, 0x10000000,
0x10000400, 0x10000008, 0x10040000, 0x00040408,
0x00040000, 0x10000408, 0x10040008, 0x00000000,
0x00000400, 0x00000008, 0x10040400, 0x10040008,
0x10040408, 0x10040000, 0x10000000, 0x00000408,
0x00000008, 0x00040400, 0x00040408, 0x10000400,
0x00000408, 0x10000000, 0x10000400, 0x00040408,
0x10040400, 0x00040008, 0x00000000, 0x10000400,
0x10000000, 0x00000400, 0x10040008, 0x00040000,
0x00040008, 0x10040408, 0x00040400, 0x00000008,
0x10040408, 0x00040400, 0x00040000, 0x10000408,
0x10000008, 0x10040000, 0x00040408, 0x00000000,
0x00000400, 0x10000008, 0x10000408, 0x10040400,
0x10040000, 0x00000408, 0x00000008, 0x10040008,
);
@SP6=(
0x00000800, 0x00000040, 0x00200040, 0x80200000,
0x80200840, 0x80000800, 0x00000840, 0x00000000,
0x00200000, 0x80200040, 0x80000040, 0x00200800,
0x80000000, 0x00200840, 0x00200800, 0x80000040,
0x80200040, 0x00000800, 0x80000800, 0x80200840,
0x00000000, 0x00200040, 0x80200000, 0x00000840,
0x80200800, 0x80000840, 0x00200840, 0x80000000,
0x80000840, 0x80200800, 0x00000040, 0x00200000,
0x80000840, 0x00200800, 0x80200800, 0x80000040,
0x00000800, 0x00000040, 0x00200000, 0x80200800,
0x80200040, 0x80000840, 0x00000840, 0x00000000,
0x00000040, 0x80200000, 0x80000000, 0x00200040,
0x00000000, 0x80200040, 0x00200040, 0x00000840,
0x80000040, 0x00000800, 0x80200840, 0x00200000,
0x00200840, 0x80000000, 0x80000800, 0x80200840,
0x80200000, 0x00200840, 0x00200800, 0x80000800,
);
@SP7=(
0x04100010, 0x04104000, 0x00004010, 0x00000000,
0x04004000, 0x00100010, 0x04100000, 0x04104010,
0x00000010, 0x04000000, 0x00104000, 0x00004010,
0x00104010, 0x04004010, 0x04000010, 0x04100000,
0x00004000, 0x00104010, 0x00100010, 0x04004000,
0x04104010, 0x04000010, 0x00000000, 0x00104000,
0x04000000, 0x00100000, 0x04004010, 0x04100010,
0x00100000, 0x00004000, 0x04104000, 0x00000010,
0x00100000, 0x00004000, 0x04000010, 0x04104010,
0x00004010, 0x04000000, 0x00000000, 0x00104000,
0x04100010, 0x04004010, 0x04004000, 0x00100010,
0x04104000, 0x00000010, 0x00100010, 0x04004000,
0x04104010, 0x00100000, 0x04100000, 0x04000010,
0x00104000, 0x00004010, 0x04004010, 0x04100000,
0x00000010, 0x04104000, 0x00104010, 0x00000000,
0x04000000, 0x04100010, 0x00004000, 0x00104010,
);

sub main'des_set_key
	{
	local($param)=@_;
	local(@key);
	local($c,$d,$i,$s,$t);
	local(@ks)=();

	# Get the bytes in the order we want.
	@key=unpack("C8",$param);

	$c=	($key[0]    )|
		($key[1]<< 8)|
		($key[2]<<16)|
		($key[3]<<24);
	$d=	($key[4]    )|
		($key[5]<< 8)|
		($key[6]<<16)|
		($key[7]<<24);

	&doPC1(*c,*d);

	for $i (@shifts2)
		{
		if ($i)
			{
			$c=($c>>2)|($c<<26);
			$d=($d>>2)|($d<<26);
			}
		else
			{
			$c=($c>>1)|($c<<27);
			$d=($d>>1)|($d<<27);
			}
		$c&=0x0fffffff;
		$d&=0x0fffffff;
		$s=	$skb0[ ($c    )&0x3f                 ]|
			$skb1[(($c>> 6)&0x03)|(($c>> 7)&0x3c)]|
			$skb2[(($c>>13)&0x0f)|(($c>>14)&0x30)]|
			$skb3[(($c>>20)&0x01)|(($c>>21)&0x06) |
					     (($c>>22)&0x38)];
		$t=     $skb4[ ($d    )&0x3f                ]|
			$skb5[(($d>> 7)&0x03)|(($d>> 8)&0x3c)]|
			$skb6[ ($d>>15)&0x3f                 ]|
			$skb7[(($d>>21)&0x0f)|(($d>>22)&0x30)];
		push(@ks,(($t<<16)|($s&0x0000ffff))&0xffffffff);
		$s=      ($s>>16)|($t&0xffff0000) ;
		push(@ks,(($s<<4)|($s>>28))&0xffffffff);
		}
	@ks;
	}

sub doPC1
	{
	local(*a,*b)=@_;
	local($t);

	$t=(($b>>4)^$a)&0x0f0f0f0f;
	$b^=($t<<4); $a^=$t;
	# do $a first 
	$t=(($a<<18)^$a)&0xcccc0000;
	$a=$a^$t^($t>>18);
	$t=(($a<<17)^$a)&0xaaaa0000;
	$a=$a^$t^($t>>17);
	$t=(($a<< 8)^$a)&0x00ff0000;
	$a=$a^$t^($t>> 8);
	$t=(($a<<17)^$a)&0xaaaa0000;
	$a=$a^$t^($t>>17);

	# now do $b
	$t=(($b<<24)^$b)&0xff000000;
	$b=$b^$t^($t>>24);
	$t=(($b<< 8)^$b)&0x00ff0000;
	$b=$b^$t^($t>> 8);
	$t=(($b<<14)^$b)&0x33330000;
	$b=$b^$t^($t>>14);
	$b=(($b&0x00aa00aa)<<7)|(($b&0x55005500)>>7)|($b&0xaa55aa55);
	$b=($b>>8)|(($a&0xf0000000)>>4);
	$a&=0x0fffffff;
	}

sub doIP
	{
	local(*a,*b)=@_;
	local($t);

	$t=(($b>> 4)^$a)&0x0f0f0f0f;
	$b^=($t<< 4); $a^=$t;
	$t=(($a>>16)^$b)&0x0000ffff;
	$a^=($t<<16); $b^=$t;
	$t=(($b>> 2)^$a)&0x33333333;
	$b^=($t<< 2); $a^=$t;
	$t=(($a>> 8)^$b)&0x00ff00ff;
	$a^=($t<< 8); $b^=$t;
	$t=(($b>> 1)^$a)&0x55555555;
	$b^=($t<< 1); $a^=$t;
	$t=$a;
	$a=$b&0xffffffff;
	$b=$t&0xffffffff;
	}

sub doFP
	{
	local(*a,*b)=@_;
	local($t);

	$t=(($b>> 1)^$a)&0x55555555;
	$b^=($t<< 1); $a^=$t;
	$t=(($a>> 8)^$b)&0x00ff00ff;
	$a^=($t<< 8); $b^=$t;
	$t=(($b>> 2)^$a)&0x33333333;
	$b^=($t<< 2); $a^=$t;
	$t=(($a>>16)^$b)&0x0000ffff;
	$a^=($t<<16); $b^=$t;
	$t=(($b>> 4)^$a)&0x0f0f0f0f;
	$b^=($t<< 4); $a^=$t;
	$a&=0xffffffff;
	$b&=0xffffffff;
	}

sub main'des_ecb_encrypt
	{
	local(*ks,$encrypt,$in)=@_;
	local($l,$r,$i,$t,$u,@input);
	
	@input=unpack("C8",$in);
	# Get the bytes in the order we want.
	$l=	($input[0]    )|
		($input[1]<< 8)|
		($input[2]<<16)|
		($input[3]<<24);
	$r=	($input[4]    )|
		($input[5]<< 8)|
		($input[6]<<16)|
		($input[7]<<24);

	$l&=0xffffffff;
	$r&=0xffffffff;
	&doIP(*l,*r);
	if ($encrypt)
		{
		for ($i=0; $i<32; $i+=4)
			{
			$t=(($r<<1)|($r>>31))&0xffffffff;
			$u=$t^$ks[$i  ];
			$t=$t^$ks[$i+1];
			$t=(($t>>4)|($t<<28))&0xffffffff;
			$l^=	$SP1[ $t     &0x3f]|
				$SP3[($t>> 8)&0x3f]|
				$SP5[($t>>16)&0x3f]|
				$SP7[($t>>24)&0x3f]|
				$SP0[ $u     &0x3f]|
				$SP2[($u>> 8)&0x3f]|
				$SP4[($u>>16)&0x3f]|
				$SP6[($u>>24)&0x3f];

			$t=(($l<<1)|($l>>31))&0xffffffff;
			$u=$t^$ks[$i+2];
			$t=$t^$ks[$i+3];
			$t=(($t>>4)|($t<<28))&0xffffffff;
			$r^=	$SP1[ $t     &0x3f]|
				$SP3[($t>> 8)&0x3f]|
				$SP5[($t>>16)&0x3f]|
				$SP7[($t>>24)&0x3f]|
				$SP0[ $u     &0x3f]|
				$SP2[($u>> 8)&0x3f]|
				$SP4[($u>>16)&0x3f]|
				$SP6[($u>>24)&0x3f];
			}
		}
	else	
		{
		for ($i=30; $i>0; $i-=4)
			{
			$t=(($r<<1)|($r>>31))&0xffffffff;
			$u=$t^$ks[$i  ];
			$t=$t^$ks[$i+1];
			$t=(($t>>4)|($t<<28))&0xffffffff;
			$l^=	$SP1[ $t     &0x3f]|
				$SP3[($t>> 8)&0x3f]|
				$SP5[($t>>16)&0x3f]|
				$SP7[($t>>24)&0x3f]|
				$SP0[ $u     &0x3f]|
				$SP2[($u>> 8)&0x3f]|
				$SP4[($u>>16)&0x3f]|
				$SP6[($u>>24)&0x3f];

			$t=(($l<<1)|($l>>31))&0xffffffff;
			$u=$t^$ks[$i-2];
			$t=$t^$ks[$i-1];
			$t=(($t>>4)|($t<<28))&0xffffffff;
			$r^=	$SP1[ $t     &0x3f]|
				$SP3[($t>> 8)&0x3f]|
				$SP5[($t>>16)&0x3f]|
				$SP7[($t>>24)&0x3f]|
				$SP0[ $u     &0x3f]|
				$SP2[($u>> 8)&0x3f]|
				$SP4[($u>>16)&0x3f]|
				$SP6[($u>>24)&0x3f];
			}
		}
	&doFP(*l,*r);
	pack("C8",$l&0xff,$l>>8,$l>>16,$l>>24,
		  $r&0xff,$r>>8,$r>>16,$r>>24);
	}

⌨️ 快捷键说明

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