C# 3DES加密解密演算法
阿新 • • 發佈:2019-02-08
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace ConsoleApplication1
{
/// <summary>
/// 加解密類
/// </summary>
public class EncryptHelper
{
//構造一個對稱演算法
private SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
#region 加密解密函式
/// <summary>
/// 字串的加密
/// </summary>
/// <param name="Value">要加密的字串</param>
/// <param name="sKey">金鑰,必須32位</param>
/// <param name="sIV">向量,必須是12個字元</param>
/// <returns>加密後的字串</returns>
public string EncryptString(string Value, string sKey,string sIV)
{
try
{
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());
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message, "出現異常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return ("Error in Encrypting " + ex.Message);
}
}
/// <summary>
/// 解密字串
/// </summary>
/// <param name="Value">加密後的字串</param>
/// <param name="sKey">金鑰,必須32位</param>
/// <param name="sIV">向量,必須是12個字元</param>
/// <returns>解密後的字串</returns>
public string DecryptString(string Value, string sKey, string sIV)
{
try
{
ICryptoTransform ct;//加密轉換運算
MemoryStream ms;//記憶體流
CryptoStream cs;//資料流連線到資料加密轉換的流
byte[] byt;
//將3DES的金鑰轉換成byte
mCSP.Key = Convert.FromBase64String(sKey);
//將3DES的向量轉換成byte
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());
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message, "出現異常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return ("Error in Decrypting " + ex.Message);
}
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
EncryptHelper helper = new EncryptHelper();
//加密
string oldValue = "13800138000";
//加密後結果
//金鑰,必須32位
string sKey = "qJzGEh6hESZDVJeCnFPGuxzaiB7NLQM5";
//向量,必須是12個字元
string sIV = "andyliu1234=";
//print
string newValue = helper.EncryptString(oldValue,sKey,sIV);
Console.WriteLine("加密後:"+ newValue);
//解密
string desValue = helper.DecryptString(newValue,sKey,sIV);
//
Console.WriteLine("解密後:"+ desValue);
Console.ReadLine();
}
}
}
更多資訊請關注我的公眾號,定時分享各自技術: