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)}");
posted @   落叶风行  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示