C#之Aes加密解密

在C#中,AES(高级加密标准)是一种常用的对称加密算法。使用AES进行加密和解密可以有效地保护数据安全。C#提供了 System.Security.Cryptography 命名空间来进行加密和解密操作

AES为对称加密,加密和解密使用同一密钥,因此需要安全地共享密钥;支持的密钥长度通常为128位、192位或256位。

1.加密

public byte[] Encrypt(byte[] key, byte[] plainData, int offset, int count)
{
    // CBC模式需要设置初始化向量IV,ECB模式则不需要设置(等价于设置为全零向量)
    // 这里设置为ECB模式
    using var aes1 = Aes.Create();
    aes1.Mode = CipherMode.ECB;
    aes1.Padding = PaddingMode.Zeros;
    aes1.Key = key;
    
    using var encryptor = aes1.CreateEncryptor();
    using var ms = new MemoryStream();
    using var writer = new CryptoStream(ms, encryptor, CryptoStreamMode.Write);
    writer.Write(plainData, offset, count);
    writer.FlushFinalBlock();
    return ms.ToArray();
}

2.解密

public byte[] Decrypt(byte[] key, byte[] cipherText)
{
    // CBC模式需要设置初始化向量IV,ECB模式则不需要设置(等价于设置为全零向量)
    // 这里设置为ECB模式 
    using var aes = Aes.Create();
    aes.Mode = CipherMode.ECB;
    aes.Padding = PaddingMode.Zeros;
    aes.Key = key;
    
    using var decryptor = aes.CreateDecryptor();
    using var msDecrypt = new MemoryStream(cipherText);
    using var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
    
    var plain = new List<byte>(cipherText.Length);
    var b = csDecrypt.ReadByte();
    while (b != -1)
    {
        plain.Add((byte) b);
        b = csDecrypt.ReadByte();
    }
    
    return plain.ToArray();
}

如果需要的是字符串,则按需转换即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值