一、提要
命名空间:System.Security.Cryptography.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
- {
- /// <summary>
- /// Class1 的摘要说明。
- /// </summary>
- 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)
- /// <summary>
- /// 加密字符串
- /// </summary>
- /// <param name="Value">输入的字符串</param>
- /// <returns>加密后的字符串</returns>
- 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)
- /// <summary>
- /// 解密字符串
- /// </summary>
- /// <param name="Value">加过密的字符串</param>
- /// <returns>解密后的字符串</returns>
- 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算法。