C#自定义加解密
C#自定義加解密
- 加解密算法
- 代碼結(jié)構(gòu)
- 代碼實(shí)現(xiàn)
- 1.定義接口
- 2.實(shí)現(xiàn)接口
- 3.定義生成器
- 使用加解密
加解密算法
加解密算法要求具有要可逆性。
如果使用相同的密鑰進(jìn)行加密和解密,則稱為對(duì)稱加密。
本文實(shí)現(xiàn)的是對(duì)稱加密的實(shí)例,實(shí)現(xiàn)的實(shí)例雖然沒(méi)有高安全性,但是勝在簡(jiǎn)潔,在一些不需要太高安全等級(jí)的場(chǎng)景下,具有便捷可用的特點(diǎn)。可以在非安全數(shù)據(jù)加密場(chǎng)景使用。也可以當(dāng)作一個(gè)小項(xiàng)目,訓(xùn)練以下自己的編程基礎(chǔ)。
代碼結(jié)構(gòu)
代碼實(shí)現(xiàn)
添加一個(gè)C#項(xiàng)目,項(xiàng)目?jī)?nèi)新建一個(gè)文件夾crypt,在文件夾內(nèi) 新建2個(gè)文件ICryptHelper.cs和CryptHelper.cs。
ICryptHelper文件:用于定義接口和對(duì)象生成類。
CryptHelper文件:類文件,實(shí)現(xiàn)了接口。
文件內(nèi)自定義為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.實(shí)現(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,其有一個(gè)靜態(tài)函數(shù)NewMD5Helper,用于返回一個(gè)實(shí)現(xiàn)了ICryptHelper接口的實(shí)例。在后續(xù)的使用中,外界只使用Maker進(jìn)行接口調(diào)用,實(shí)現(xiàn)高內(nèi)聚低耦合的接口編程。
使用加解密
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}");結(jié)果如下:
總結(jié)
- 上一篇: 联想笔记本小新air14,键盘如何设置不
- 下一篇: C#_打包发布变成一个绿色版本软件——C