一、名词解释

AES:AES(Advanced Encryption Standard)是一种对称加密算法,采用分块加密机制处理128位数据块,支持128/192/256位密钥长度。

Key:密钥,是加密算法的核心参数,用于对数据进行加密或解密。长度通常为128位(16字节)、192位(24字节)或256位(32字节),具体长度根据算法模式选择确定,默认模式下长度为128位(16字节)。 ‌

IV:初始化向量,是一个固定长度的随机数,长度为128位(16字节),用于增强加密安全性。其核心作用是确保使用同一密钥加密相同明文时生成不同密文,避免安全漏洞。

二、代码示例

using System;
using System.Security.Cryptography;


public class Aes{
    public static void Main(string[] args){
        string originalText="test text";
        string key = "1234567890123456"; // 16位
        string iv = "abcdefghijklmnop";  // 16位
        //获取加密后的Base64编码的originalText
        string cipherText=Encrypt(originalText,key,iv);
        //解密通过Encrypt方法加密得到的Base64编码的字符串
        string plainText=Decrypt(cipherText,key,iv);
    }

    /// <summary>加密字符串</summary>
    /// <param name="plainText">需要加密的明文</param>
    /// <param name="key">加密密钥</param>
    /// <param name="iv">初始化向量</param>
    /// <returns>返回Base64编码的字符串</returns>
    public string Encrypt(string plainText,string key,string iv) {
        string cipherText;
        using (Aes aes = Aes.Create()) {
            aes.Key=Encoding.UTF8.GetBytes(key);
            aes.IV=Encoding.UTF8.GetBytes(iv);
            using (ICryptoTransform encryptor = aes.CreateEncryptor()){
                byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
                byte[] encryptedData = encryptor.TransformFinalBlock(plainTextBytes, 0, plainTextBytes.Length);
                cipherText = Convert.ToBase64String(encryptedData);
            }
        }
        return cipherText;
    }

    /// <summary>解密字符串</summary>
    /// <param name="cipherText">通过Encrypt加密得到的Base64编码的字符串</param>
    /// <param name="key">解密密钥,要与加密密钥相同</param>
    /// <param name="iv">初始化向量,要与加密的初始化向量相同</param>
    /// <returns>返回解密后的字符串</returns>
    public string Decrypt(string cipherText,string key,string iv) {
        using (Aes aes = Aes.Create()) {
            aes.Key= Encoding.UTF8.GetBytes(key);
            aes.IV = Encoding.UTF8.GetBytes(iv);
            using (ICryptoTransform decryptor = aes.CreateDecryptor()){
                try{
                    byte[] plainTextBytes=Convert.FromBase64String(cipherText);
                    byte[] decryptedData=decryptor.TransformFinalBlock(plainTextBytes,0,plainTextBytes.Length);
                    return Encoding.UTF8.GetString(decryptedData);
                }catch{
                    return "";
                }
            }
        }
    }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐