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

📄 des.pl

📁 Netscape公司提供的安全套接字层
💻 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,$inc,$start,$end,$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 + -