代码改变世界

再发3DES加密.

2006-10-23 13:30  Rainbow  阅读(705)  评论(0)    收藏  举报

最近一直在为3DES加密烦呢啊.今天中午请了个高手一起.终于搞定了.自己的东西不敢独自用啊.发给有需要的同学啊.(是不是老牛吃嫩草了啊.多毕业快两年了啊)
再次说明下.当对方是用PHP,或者JSP做接受方时.一定要选好加密算法的填充模式.JSP默认就是PKCS7的.PHP不是.但是可以更改成PKCS7模式啊.
还有就是对key一定要做好双方的base64编码方式啊.我就是吃了很大亏.
代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Security.Cryptography;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
using System.Threading;

/// <summary>
/// dllEncrypt 的摘要说明
/// </summary>
public class dllEncrypt
{
 public dllEncrypt()
 {
  //
  // TODO: 在此处添加构造函数逻辑
  //
 }
    private const string sKey = "ztxjabcdsmsefghssoijwzlm";

      //矢量,矢量可以为空

    private const string sIV = "ztxjabcd";

      //构造一个对称算法

      private SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
      #region public string EncryptString(string Value)

      ///

      /// 加密字符串

      ///

      /// 输入的字符串

      /// 加密后的字符串

      public string EncryptString(string Value)

      {

         ICryptoTransform ct;

         MemoryStream ms;

         CryptoStream cs;

         byte[] byt = Encoding.Default.GetBytes(Value);

         mCSP.Key = Encoding.Default.GetBytes(sKey);

         mCSP.IV = Encoding.Default.GetBytes(sIV);

         //指定加密的运算模式

         mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;

        //获取或设置加密算法的填充模式

         mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

         ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);

         ms = new MemoryStream();

         cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

         cs.Write(byt, 0, byt.Length);

         cs.FlushFinalBlock();

         cs.Close();

    
         return Convert.ToBase64String(ms.ToArray());


      }

      #endregion

 

      #region public string DecryptString(string Value)

      ///

      /// 解密字符串

      ///

      /// 加过密的字符串

      /// 解密后的字符串

      public string DecryptString(string Value)

      {

         ICryptoTransform ct;

         MemoryStream ms;

         CryptoStream cs;

         byte[] byt;

         mCSP.Key = Encoding.Default.GetBytes(sKey);

         mCSP.GenerateIV();

         mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;

         mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

         ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);

         byt = Convert.FromBase64String(Value);

         ms = new MemoryStream();

         cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

         cs.Write(byt, 0, byt.Length);

         cs.FlushFinalBlock();

         cs.Close();

         return Encoding.Default.GetString(ms.ToArray());

      }

      #endregion

    }