CSDN博客

img zsxfbj

对3DES加密的运用的一个简单示例

发表于2004/6/30 8:34:00  2249人阅读

一、提要

命名空间:System.Security.Cryptography.TripleDES

简单说明: 表示三重数据加密标准算法的基类,TripleDES 的所有实现都必须从此基类派生,但TripleDES是从 SymmetricAlgorithm 类里继承出来。TripleDES 使用 DES 算法的三次连续迭代。它可以使用两个或三个 56 位密钥。

       使用目的:比较安全的加密一种方式,密钥和矢量的不同,会生产不同的加密字串。因为是DES算法的三次连续迭代,而且算法可逆,这样对于数据保密性和可恢复性都不错。

    使用方法:直接进行字符串输入和输出。

二、代码示例

本代码参照了部分MSDN上的代码示例,再根据自己的实际情况,补充了一部分MSDN上没有提到的内容

 

using System;

using System.Security;

using System.Security.Cryptography;

using System.IO;

using System.Text;

using System.Threading;

 

namespace TRIP3DES

{

    ///

    /// Class1 的摘要说明。

    ///

    public class dllEncrypt

    {

      //密钥

      private const string sKey = "qJzGEh6hESZDVJeCnFPGuxzaiB7NLQM3";

      //矢量,矢量可以为空

      private const string sIV = "qcDY6X+aPLw=";

      //构造一个对称算法

      private SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();

 

        public dllEncrypt(){}

 

      #region public string EncryptString(string Value)

      ///

      /// 加密字符串

      ///

      /// 输入的字符串

      /// 加密后的字符串

      public string EncryptString(string Value)

      {

         ICryptoTransform ct;

         MemoryStream ms;

         CryptoStream cs;

         byte[] byt;

         mCSP.Key = Convert.FromBase64String(sKey);

         mCSP.IV = Convert.FromBase64String(sIV);

         //指定加密的运算模式

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

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

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

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

         byt = Encoding.UTF8.GetBytes(Value);

         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 = Convert.FromBase64String(sKey);

         mCSP.IV = Convert.FromBase64String(sIV);

         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.UTF8.GetString(ms.ToArray());

      }

      #endregion

    }

}

 

三、总结

做成类库对于密钥和矢量的保管比较方便,输入输出全部是string型变量,这样也比较方便,密钥的生成可以用mSCP. GenerateKey()来生成,矢量的生成也可以用mCSP.GenerateIV()来生成。大家也可以自己灵活的编写符合自己的3DES算法。

0 0

相关博文

我的热门文章

img
取 消
img