一、 提要
命名空间: 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 算法。