2678777127 发表于 2018-2-11 11:51:37


            PHP实现和c#一致的DES加密解密,可以从网上搜到一大堆,但是测试后发现都没法用。以下正确代码是我经过苦苦才找到的。希望大家在系统整合时能用的上。
注意:key的长度为8位以内。
//C# 版DES 加解密算法
using System;   
using System.Data;   
using System.Configuration;   
using System.Web;   
using System.Web.Security;   
using System.Web.UI;   
using System.Web.UI.WebControls;   
using System.Web.UI.WebControls.WebParts;   
using System.Web.UI.HtmlControls;   
using System.Data.SqlClient;   
using System.Security.Cryptography;   
using System.IO;   
using System.Text;   
public class Des{   
//加解密密钥
private static string skey = "12345678";
//初始化向量
private static byte[] DESIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

      #region DESEnCode DES加密   
      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();   
      }
      #endregion
      ///
      ///
      ///
      ///待解密的字符串
      ///解密密钥,要求为8字节,和加密密钥相同
      /// 解密成功返回解密后的字符串,失败返源串
      #region DESDeCode DES解密
      public static string DESDeCode(string pToDecrypt, string sKey)
      {
          //HttpContext.Current.Response.Write(pToDecrypt + "
" + sKey);   
          //HttpContext.Current.Response.End();   
          DESCryptoServiceProvider des = new DESCryptoServiceProvider();
      
          byte[] inputByteArray = new byte;
          for (int x = 0; x
页: [1]
查看完整版本: php实现和c#一致的DES加密解密实例