1. 程式人生 > >C# 3DES加密解密演算法

C# 3DES加密解密演算法

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();
        }
    }
}

更多資訊請關注我的公眾號,定時分享各自技術:

這裡寫圖片描述