php和c#一致的DES加密解密算法类

DES加解密算法,在C#与PHP中的通用类。

注意:

1、类中的秘钥key跟向量iv,均用的同样的值

2、编码均采用的utf-8


以下为具体代码,可以直接复制去进行实际测试

C#版代码:

[csharp]  view plain  copy
  1. using System;     
  2. using System.Data;     
  3. using System.Configuration;     
  4. using System.Web;     
  5. using System.Web.Security;     
  6. using System.Web.UI;     
  7. using System.Web.UI.WebControls;     
  8. using System.Web.UI.WebControls.WebParts;     
  9. using System.Web.UI.HtmlControls;     
  10. using System.Data.SqlClient;     
  11. using System.Security.Cryptography;     
  12. using System.IO;     
  13. using System.Text;    
  14.   
  15. //C# 版DES 加解密算法类  
  16. public class Des{     
  17.     //加解密密钥  
  18.     private static  string skey = "12345678";  
  19.      
  20.     #region DESEnCode DES加密     
  21.     public static string DESEnCode(string pToEncrypt, string sKey)     
  22.     {     
  23.         pToEncrypt = HttpContext.Current.Server.UrlEncode(pToEncrypt);     
  24.         DESCryptoServiceProvider des = new DESCryptoServiceProvider();     
  25.         byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);     
  26.       
  27.         des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);     
  28.         des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);     
  29.         MemoryStream ms = new MemoryStream();     
  30.         CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);     
  31.      
  32.         cs.Write(inputByteArray, 0, inputByteArray.Length);     
  33.         cs.FlushFinalBlock();     
  34.      
  35.         StringBuilder ret = new StringBuilder();     
  36.         foreach (byte b in ms.ToArray())     
  37.         {     
  38.             ret.AppendFormat("{0:X2}", b);     
  39.         }     
  40.         ret.ToString();     
  41.         return ret.ToString();     
  42.     }    
  43.     #endregion    
  44.      
  45.     #region DESDeCode DES解密  
  46.     public static string DESDeCode(string pToDecrypt, string sKey)  
  47.     {  
  48.         DESCryptoServiceProvider des = new DESCryptoServiceProvider();  
  49.         byte[] inputByteArray = new byte[pToDecrypt.Length / 2];  
  50.         for (int x = 0; x < pToDecrypt.Length / 2; x++)  
  51.         {  
  52.             int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));  
  53.             inputByteArray[x] = (byte)i;  
  54.         }  
  55.    
  56.         des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);  
  57.         des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  
  58.         MemoryStream ms = new MemoryStream();  
  59.         CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);  
  60.         cs.Write(inputByteArray, 0, inputByteArray.Length);  
  61.         cs.FlushFinalBlock();  
  62.    
  63.         StringBuilder ret = new StringBuilder();  
  64.    
  65.         return HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray()));  
  66.     }  
  67.     #endregion   
  68. }       

PHP版代码:

[php]  view plain  copy
  1. <?php  
  2. //PHP 版DES 加解密算法类  
  3. class DES {  
  4.     var $key;  
  5.     var $iv//偏移量  
  6.       
  7.     function __construct($key) {  
  8.         //key长度为8位,例如:1234abcd  
  9.         $this->key = $key;  
  10.         $this->iv = $key//默认以$key 作为 iv  
  11.     }  
  12.       
  13.     //加密  
  14.     function encrypt($str) {  
  15.         $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );  
  16.         $str = $this->pkcs5Pad ( $str$size );  
  17.         return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );  
  18.     }  
  19.       
  20.     //解密  
  21.     function decrypt($str) {  
  22.         $strBin = $this->hex2bin( strtolower$str ) );  
  23.         $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );  
  24.         $str = $this->pkcs5Unpad( $str );  
  25.         return $str;  
  26.     }  
  27.       
  28.     function hex2bin($hexData) {  
  29.         $binData = "";  
  30.         for($i = 0; $i < strlen ( $hexData ); $i += 2) {  
  31.             $binData .= chr ( hexdec ( substr ( $hexData$i, 2 ) ) );  
  32.         }  
  33.         return $binData;  
  34.     }  
  35.   
  36.     function pkcs5Pad($text$blocksize) {  
  37.         $pad = $blocksize - (strlen ( $text ) % $blocksize);  
  38.         return $text . str_repeat ( chr ( $pad ), $pad );  
  39.     }  
  40.       
  41.     function pkcs5Unpad($text) {  
  42.         $pad = ord ( $text {strlen ( $text ) - 1} );  
  43.         if ($pad > strlen ( $text ))  
  44.             return false;  
  45.         if (strspn ( $textchr ( $pad ), strlen ( $text ) - $pad ) != $pad)  
  46.             return false;  
  47.         return substr ( $text, 0, - 1 * $pad );  
  48.     }  
  49. }  
  50.   
  51. header("Content-type: text/html; charset=utf-8");  
  52. $key = '12345678';  
  53. $str = 'abc.123';  
  54. $des = new DES($key);  
  55. $str_en_des = $des->encrypt($str); //加密字符串  
  56. $str_de_des = $des->decrypt($str_en_des); //解密字符串  
  57. echo '加密字符串:',$str,'<br>';  
  58. echo '加密秘钥key:',$key,'<br><br>';  
  59. echo '加密后字符串:',$str_en_des,'<br>';  
  60. echo '解密后字符串:',$str_de_des,'<br>';  
  61.   
  62. ?>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值