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