System.Security.Cryptography Namespace - Aes 加解密
C# System.Security.Cryptography Namespace - Aes 加解密
直接上代码自己看
using System;
using System.Collections;
using System.IO;
using System.Security.Cryptography;
using System.Text;
internal class AesCryptors
{
private CipherMode _cipherMode = CipherMode.ECB;
private PaddingMode _paddingMode = PaddingMode.PKCS7;
private int _keySize = 128;
private int _blockSize = 128;
public AesCryptors(CipherMode cipherMode = CipherMode.ECB, PaddingMode paddingMode = PaddingMode.PKCS7, int KeySize = 128, int BlockSize = 128)
{
_cipherMode = cipherMode;
_paddingMode = paddingMode;
_keySize = KeySize;
_blockSize = BlockSize;
}
public string EncryptString(string key, string cipherText, string? _iv =null)
{
var _cipherText = Encoding.UTF8.GetBytes(cipherText);
var _key = GeneralKey(key);
using (Aes aes = Aes.Create())
{
aes.KeySize = _keySize;
aes.BlockSize = _blockSize;
aes.Mode = _cipherMode;
aes.Padding = _paddingMode;
aes.IV = string.IsNullOrWhiteSpace(_iv) ? aes.IV : Encoding.UTF8.GetBytes(_iv);
var encryptor = aes.CreateEncryptor(_key, aes.IV);
var arrBytes = encryptor.TransformFinalBlock(_cipherText, 0, _cipherText.Length);
var result = Convert.ToBase64String(arrBytes);
return result;
}
}
public string DecryptString(string key,string cipherText, string? _iv = null)
{
var _key = GeneralKey(key);
using (Aes aes = Aes.Create())
{
aes.KeySize = _keySize;
aes.BlockSize = _blockSize;
aes.Mode = _cipherMode;
aes.Padding = _paddingMode;
aes.IV = string.IsNullOrWhiteSpace(_iv) ? aes.IV : Encoding.UTF8.GetBytes(_iv);
var decryptor = aes.CreateDecryptor(_key, aes.IV);
var arrBytes = Convert.FromBase64String(cipherText);
var arrResult = decryptor.TransformFinalBlock(arrBytes, 0, arrBytes.Length);
var decryptorString = Encoding.UTF8.GetString(arrResult);
return decryptorString;
}
}
private byte[] GeneralKey(string key, int keySize = 16)
{
byte[] keyArray = Encoding.UTF8.GetBytes(key);
var _key = Enumerable.Range(0, keySize).Select(x => keyArray.Length > x ? keyArray[x] : Convert.ToByte(0)).ToArray();
return _key;
}
}
调用
string original = "hello workd!", _key = "1234abcd", iv="gw66qxcjfpiw2wdx", key="80zku81na34g3vra";
// CipherMode Default ECB
var aesCryptors = new AesCryptors();
var encryptd = aesCryptors.EncryptString(_key, original);
var decryptd = aesCryptors.DecryptString(_key, encryptd);
Console.WriteLine($"{encryptd} , {decryptd} , original equals decryptd: {original.Equals(decryptd)}");
// CipherMode.CBC
var aesCryptors2 = new AesCryptors(cipherMode: CipherMode.CBC);
encryptd = aesCryptors2.EncryptString(key, original, iv);
decryptd = aesCryptors2.DecryptString(key, encryptd, iv);
Console.WriteLine($"{encryptd} , {decryptd} , original equals decryptd: {original.Equals(decryptd)}");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App