弱弱地问一句,tdes對稱式加密函數TrippleDES,是不是跟PHP扩展mcrypt_encrypt加密一样的?

解决方案 »

  1.   

    试了,就是不一样哦...
    PHP版
       class CookieCrypt   
        {     
            var $key;  
            function CookieCrypt($key)   
            {         
            $this->key = $key;  
            }         
            function encrypt($input)   
           {         
              $size = mcrypt_get_block_size('des','ecb');  
              $input = $this->pkcs5_pad($input, $size);  
              $key = $this->key;  
              $td = mcrypt_module_open('des', '', 'ecb', '');  
              $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);  
              @mcrypt_generic_init($td, $key, $iv);  
              $data = mcrypt_generic($td, $input);  
              mcrypt_generic_deinit($td);  
              mcrypt_module_close($td);  
              $data = base64_encode($data);  
              return $data;  
           }         
           function decrypt($encrypted)  
           {         
              $encrypted = base64_decode($encrypted);  
              $key =$this->key;  
              $td = mcrypt_module_open('des','','ecb','');   
              //使用MCRYPT_DES算法,cbc模式  
              $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);  
              $ks = mcrypt_enc_get_key_size($td);  
              @mcrypt_generic_init($td, $key, $iv);  
              //初始处理                 
              $decrypted = mdecrypt_generic($td, $encrypted);  
              //解密  
              mcrypt_generic_deinit($td);  
              //结束               
              mcrypt_module_close($td);  
              $y=$this->pkcs5_unpad($decrypted);  
              return $y;     
           }         
           function pkcs5_pad ($text, $blocksize)   
           {         
              $pad = $blocksize - (strlen($text) % $blocksize);  
              return $text . str_repeat(chr($pad), $pad);  
           }     
           function pkcs5_unpad($text)   
           {         
              $pad = ord($text{strlen($text)-1});  
              if ($pad > strlen($text))  
              {  
                  return false;  
              }  
              if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)  
              {  
                 return false;  
              }  
              return substr($text, 0, -1 * $pad);  
           }  
      }   
    $key = "123456781234567812345678";  
    $input = sha1("test");  
    $crypt = new CookieCrypt($key);  
    echo "Encode:".$crypt->encrypt($input)."<br/>";  
    echo "Encode:".strlen($crypt->encrypt($input))."<br/>";  
    echo "Decode:".$crypt->decrypt($crypt->encrypt($input));
    ?>
    asp com版    regsvr32   元件所在路徑\Security.dll
      2. 應用壓碼函式 Fcb_Mac( data, key)
           MAC產生 ASP應用範例:
           <%@ Language=JavaScript%>
           <%
    var obj=Server.CreateObject ("Security.UseSecurity.1");
    data="test";
    key="123456781234567812345678";
    mac=obj.Fcb_Mac(data,key);
    Response.Write(mac);  
           %>正确测试结果Base64(TDES(KEY,SHA-1(押碼資料)))
    押碼資料:test
    押碼Key:123456781234567812345678
    經SHA-1押碼後為:A94A8FE5CCB19BA61C4C0873D391E987982FBBD300000000  
    經TDES押碼後為:FDDADB7E2DD648E3AF3816FB5EF0696C7C887F1ED1BCADBA
    經Base64押碼後為:/drbfi3WSOOvOBb7XvBpbHyIfx7RvK26大家帮我分析一下