升木 发表于 2017-3-21 11:41:04

c# php des

  c#:
      public class DES{//加解密密钥//private static string skey = "12345678";//初始化向量private static byte[] DESIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };/// <summary>/// DESEnCode DES加密/// </summary>/// <param name=”pToEncrypt”></param>/// <param name=”sKey”></param>/// <returns></returns>public static string DESEnCode(string pToEncrypt, string sKey){//pToEncrypt = HttpContext.Current.Server.UrlEncode(pToEncrypt);DESCryptoServiceProvider des = new DESCryptoServiceProvider();byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);//建立加密对象的密钥和偏移量   //原文使用ASCIIEncoding.ASCII方法的GetBytes方法   //使得输入密码必须输入英文文本   des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();StringBuilder ret = new StringBuilder();foreach (byte b in ms.ToArray()){ret.AppendFormat("{0:X2}", b);}ret.ToString();return ret.ToString();}/// <summary>/// DESDeCode DES解密/// </summary>/// <param name=”pToDecrypt”> 待解密的字符串</param>/// <param name=”sKey”> 解密密钥,要求为8字节,和加密密钥相同</param>/// <returns>解密成功返回解密后的字符串,失败返源串</returns>       public static string DESDeCode(string pToDecrypt, string sKey){//    HttpContext.Current.Response.Write(pToDecrypt + “<br>” + sKey);//    HttpContext.Current.Response.End();DESCryptoServiceProvider des = new DESCryptoServiceProvider();byte[] inputByteArray = new byte;for (int x = 0; x < pToDecrypt.Length / 2; x++){int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));inputByteArray = (byte)i;}des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();StringBuilder ret = new StringBuilder();return System.Text.Encoding.Default.GetString(ms.ToArray());//return HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray()));}}
php:
  <?php// s777n.netclass DES {var $key;var $iv; // 偏移量function DES($key, $iv = 0) {// key长度8例如:1234abcd$this->key = $key;if ($iv == 0) {$this->iv = $key;} 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} );if ($pad > strlen ( $text ))return false;if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad)return false;return substr ( $text, 0, - 1 * $pad );}}/*$str = '123456789';$key = '1234abcd';$crypt = new DES ( $key );$mstr = $crypt->encrypt ( $str );$str = $crypt->decrypt ( $mstr );echo $str . ' <=> ' . $mstr;*/$str = '6BB3151AA457962A';$key = '1234abcd';$crypt = new DES ( $key );$str = $crypt->decrypt ( $str );echo $str ;?>
页: [1]
查看完整版本: c# php des