C#自定义加解密
C#自定義加解密
- 加解密算法
- 代碼結構
- 代碼實現(xiàn)
- 1.定義接口
- 2.實現(xiàn)接口
- 3.定義生成器
- 使用加解密
加解密算法
加解密算法要求具有要可逆性。
如果使用相同的密鑰進行加密和解密,則稱為對稱加密。
本文實現(xiàn)的是對稱加密的實例,實現(xiàn)的實例雖然沒有高安全性,但是勝在簡潔,在一些不需要太高安全等級的場景下,具有便捷可用的特點。可以在非安全數(shù)據(jù)加密場景使用。也可以當作一個小項目,訓練以下自己的編程基礎。
代碼結構
代碼實現(xiàn)
添加一個C#項目,項目內新建一個文件夾crypt,在文件夾內 新建2個文件ICryptHelper.cs和CryptHelper.cs。
ICryptHelper文件:用于定義接口和對象生成類。
CryptHelper文件:類文件,實現(xiàn)了接口。
文件內自定義為crypt命名空間。
1.定義接口
ICryptHelper.cs:
namespace crypt {/// <summary>/// 使用MD5加解密/// </summary>public interface ICryptHelper{/// <summary>/// 加密/// </summary>/// <param name="value">明文</param>/// <param name="key">密鑰 8位數(shù)字</param>/// <returns>密文</returns>string Encrypt(string value, string key);/// <summary>/// 解密/// </summary>/// <param name="value">密文</param>/// <param name="key">密鑰 8位數(shù)字</param>/// <returns>明文</returns>string Decrypt(string value, string key);}public class Maker{public static ICryptHelper NewMD5Helper(){return new CryptHelper();}}}2.實現(xiàn)接口
CryptHelper.cs:
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace crypt {internal class CryptHelper : ICryptHelper{private string Run(Func<DESCryptoServiceProvider, string> func){try{DESCryptoServiceProvider des = new DESCryptoServiceProvider();return func(des);}catch { return ""; }}public string Encrypt(string value, string key){return Run(des =>{byte[] inputByteArray = Encoding.Default.GetBytes(value);des.Key = ASCIIEncoding.ASCII.GetBytes(key);des.IV = ASCIIEncoding.ASCII.GetBytes(key);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();StringBuilder ret = new StringBuilder();foreach (byte b in ms.ToArray()){ret.AppendFormat("{0:X2}", b);}return ret.ToString();});}public string Decrypt(string value, string key){return Run(des =>{byte[] inputByteArray = new byte[value.Length / 2];for (int x = 0; x < value.Length / 2; x++){int i = (Convert.ToInt32(value.Substring(x * 2, 2), 16));inputByteArray[x] = (byte)i;}des.Key = ASCIIEncoding.ASCII.GetBytes(key);des.IV = ASCIIEncoding.ASCII.GetBytes(key);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();StringBuilder ret = new StringBuilder();return System.Text.Encoding.Default.GetString(ms.ToArray());});}} }3.定義生成器
在ICryptHelper.cs文件中,定義了類Maker,其有一個靜態(tài)函數(shù)NewMD5Helper,用于返回一個實現(xiàn)了ICryptHelper接口的實例。在后續(xù)的使用中,外界只使用Maker進行接口調用,實現(xiàn)高內聚低耦合的接口編程。
使用加解密
var md5 = crypt.Maker.NewMD5Helper(); var cry = md5.Encrypt("abc.123","20220731"); Console.WriteLine($"cipher:{cry}"); var txt = md5.Decrypt(cry,"20220731"); Console.WriteLine($"text:{txt}");結果如下:
總結
- 上一篇: 联想笔记本小新air14,键盘如何设置不
- 下一篇: SAP中汇率固定配置和应用分析测试