當前位置: 妍妍網 > 碼農

開始開源計畫OpenTools的創作

2024-05-11碼農

前言:開始開源計畫的創作。目的是開發一系列方便大家拿來即可使用的工具集合,希望能夠讓.net的生態更加豐富。該計畫采用MIT開源。並且如果參照nuget包,該計畫可以相容.net framework4.6.1以及以上的所有.nrt framework以及所有.net core或以上環境的所有.net版本。

Wesky.Net.OpenTools,開源地址: https://gitee.com/dreamer_j/open-tools.git

第一個nuget包版本,目前只有AES加密和解密,以及Byte數據轉換兩個功能。將來會繼續不斷完善、拓展。

先使用下第一個功能,AES加解密。

編寫一個簡單的控制台,, nuget包參照 WSesky.Net.OpenTools

編寫加密和解密功能

執行,得到加密和解密結果。

加密解密程式碼解析:

///<summary>/// 使用AES加密演算法加密文本。/// Encrypts the text using AES encryption algorithm.///</summary>///<param name="key">加密金鑰,必須是32字元長。/ Encryption key, must be 32 characters long.</param>///<param name="password">要加密的文本。/ The text to be encrypted.</param>///<param name="iv">初始化向量,必須是16字元長。/ Initialization vector, must be 16 characters long.</param>///<returns>加密後的十六進制字串。/ Encrypted text in hexadecimal string format.</returns>publicstaticstringAesEncrypt(string key, string password, string iv) {if (key == null || key.Length < 32)thrownew ArgumentException("Key must be at least 32 characters long.", nameof(key));if (iv == null || iv.Length < 16)thrownew ArgumentException("IV must be at least 16 characters long.", nameof(iv));byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));byte[] ivBytes = Encoding.UTF8.GetBytes(iv.Substring(0, 16));using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider()) { aesAlg.Key = keyBytes; aesAlg.IV = ivBytes; ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);using (MemoryStream msEncrypt = new MemoryStream()) {using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) {using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(password); }return ByteConvert.ByteArrayToHexString(msEncrypt.ToArray()); } } } }///<summary>/// 使用AES解密演算法解密文本。/// Decrypts the text using the AES decryption algorithm.///</summary>///<param name="key">解密金鑰,必須是32字元長。/ Decryption key, must be 32 characters long.</param>///<param name="encryptedText">要解密的文本,以十六進制字串格式。/ The text to be decrypted, in hexadecimal string format.</param>///<param name="iv">初始化向量,必須是16字元長。/ Initialization vector, must be 16 characters long.</param>///<returns>解密後的字串。/ Decrypted string.</returns>publicstaticstringAESDecrypt(string key, string encryptedText, string iv) {if (key == null || key.Length < 32)thrownew ArgumentException("Key must be at least 32 characters long.", nameof(key));if (iv == null || iv.Length < 16)thrownew ArgumentException("IV must be at least 16 characters long.", nameof(iv));byte[] inputBytes = ByteConvert.HexStringToByteArray(encryptedText);byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));byte[] ivBytes = Encoding.UTF8.GetBytes(iv.Substring(0, 16));using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider()) { aesAlg.Key = keyBytes; aesAlg.IV = ivBytes; ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);using (MemoryStream msDecrypt = new MemoryStream(inputBytes)) {using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) {using (StreamReader srDecrypt = new StreamReader(csDecrypt)) {return srDecrypt.ReadToEnd(); } } } } }