好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP与asp.net C#可共用的可逆加密算法 - php高级应用

PHP与asp.net C#可共用的可逆加密算法

因为工作需我们需要在php中生成加密然后在asp.net中接受过来的密码再解密,下面我找到一个PHP与asp.net C#可共用的可逆加密算法,有需要了解的同学可参考.

php加密算法,代码如下:

<?php  class  DES  {       var   $key ;       var   $iv ;  //偏移量              function  DES( $key  =  '11001100' ,  $iv =0 ) {       //key长度8例如:1234abcd            $this ->key =  $key ;           if (  $iv  == 0 ) {               $this ->iv =  $key ;  //默认以$key 作为 iv           }  else  {               $this ->iv =  $iv ;  //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );           }      }             function  encrypt( $str ) {       //加密,返回大写十六进制字符串            $size  = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );           $str  =  $this ->pkcs5Pad (  $str ,  $size  );           return   strtoupper ( bin2hex( mcrypt_cbc(MCRYPT_DES,  $this ->key,  $str , MCRYPT_ENCRYPT,  $this ->iv ) ) );      }             function  decrypt( $str ) {       //解密            $strBin  =  $this ->hex2bin(  strtolower (  $str  ) );           $str  = mcrypt_cbc( MCRYPT_DES,  $this ->key,  $strBin , MCRYPT_DECRYPT,  $this ->iv );           $str  =  $this ->pkcs5Unpad(  $str  );           return   $str ;      }             function  hex2bin( $hexData ) {           $binData  =  "" ;           for ( $i  = 0;  $i  <  strlen  (  $hexData  );  $i  += 2) {               $binData  .=  chr  ( hexdec (  substr  (  $hexData ,  $i , 2 ) ) );          }           return   $binData ;      }         function  pkcs5Pad( $text ,  $blocksize ) {           $pad  =  $blocksize  - ( strlen  (  $text  ) %  $blocksize );           return   $text  .  str_repeat  (  chr  (  $pad  ),  $pad  );      }             function  pkcs5Unpad( $text ) {           $pad  = ord (  $text  { strlen  (  $text  ) - 1} );           //开源代码phpfensi测试数据            if  ( $pad  >  strlen  (  $text  ))               return  false;           if  ( strspn  (  $text ,  chr  (  $pad  ),  strlen  (  $text  ) -  $pad  ) !=  $pad )               return  false;           return   substr  (  $text , 0, - 1 *  $pad  );      }        }  ?> 

asp.net程序代码,代码如下:

using System;  using System.Collections.Generic;  using System.IO;  using System.Linq;  using System.Security.Cryptography;  using System.Text;    namespace WindowsFormsApplication1  {       /// <summary>        /// DES加密解密字符串        /// </summary>        public   class  DesEncryption      {           /// <summary>            /// DES加密字符串            /// </summary>            /// <param name="encryptString">待加密的字符串</param>            /// <param name="encryptKey">加密密钥,要求为8位</param>            /// <returns>加密成功返回加密后的字符串,失败返回null</returns>            public   static  string EncryptDES(string encryptString, string encryptKey =  "11001100" )          {              try              {                  byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(encryptKey.Substring(0, 8));                  byte[] rgbIV = rgbKey;                  byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);                  DESCryptoServiceProvider dCSP =  new  DESCryptoServiceProvider();                  MemoryStream mStream =  new  MemoryStream();                  CryptoStream cStream =  new  CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);                  cStream.Write(inputByteArray, 0, inputByteArray.Length);                  cStream.FlushFinalBlock();                  StringBuilder ret =  new  StringBuilder();                   foreach  (byte b in mStream.ToArray())                  {                      ret.AppendFormat( "{0:X2}" , b);                  }                  ret.ToString();                   return  ret.ToString();               }              catch              {                   return  null;              }          }             /// <summary>            /// DES解密字符串            /// </summary>            /// <param name="decryptString">待解密的字符串</param>            /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>            /// <returns>解密成功返回解密后的字符串,失败返回null</returns>            public   static  string DecryptDES(string decryptString, string decryptKey =  "11001100" )          {              try              {                  byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(decryptKey);                  byte[] rgbIV = rgbKey;                  byte[] inputByteArray =  new  byte[decryptString.Length / 2];                   for  (int x = 0; x < decryptString.Length / 2; x++)                  {                      int i = (Convert.ToInt32(decryptString.Substring(x * 2, 2), 16));                      inputByteArray[x] = (byte)i;                  }                              DESCryptoServiceProvider DCSP =  new  DESCryptoServiceProvider();                  MemoryStream mStream =  new  MemoryStream();                  CryptoStream cStream =  new  CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);                  cStream.Write(inputByteArray, 0, inputByteArray.Length);                  cStream.FlushFinalBlock();                   return  Encoding.UTF8.GetString(mStream.ToArray());              }              catch              {                   return  null;              }          }      }  } 

查看更多关于PHP与asp.net C#可共用的可逆加密算法 - php高级应用的详细内容...

  阅读:42次