为何我的C#基础AES256加密结果与在线加密工具不一致?
AES加密结果与在线工具不一致的原因及修复
核心问题:密钥处理逻辑不匹配
你代码中将密钥字符串按Base64解码生成密钥,而在线工具默认是将密钥字符串以UTF-8编码转换为字节数组作为密钥,两者生成的密钥完全不同:
- 代码逻辑:
Convert.FromBase64String("gHyP6i8mXqmdFK4rKsKP7EqvzfxwbtyE")解码后得到24字节(192位)密钥,不符合你指定的256位要求。 - 在线工具逻辑:输入的密钥字符串共32个ASCII字符,UTF-8编码后正好是32字节(256位),符合AES-256的密钥长度规范。
修复方案
修改代码中的密钥生成方式,将Base64解码替换为UTF-8编码:
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace AesApp { internal class Program { static void Main(string[] args) { using (Aes myAes = Aes.Create()) { myAes.Mode = CipherMode.ECB; // 替换密钥生成逻辑为UTF-8编码 myAes.Key = Encoding.UTF8.GetBytes("gHyP6i8mXqmdFK4rKsKP7EqvzfxwbtyE"); string plaintext = "test"; Console.WriteLine($"Plaintext : {plaintext}"); ICryptoTransform encryptor = myAes.CreateEncryptor(); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(plaintext); } byte[] encrypted = msEncrypt.ToArray(); string encryptedString = Convert.ToBase64String(encrypted); Console.WriteLine($"Encrypted : {encryptedString}"); } } } } } }
验证说明
修改后运行代码,加密结果将与在线工具输出的yyO1N4G9uxXJlQ8FLU3KfQ==完全一致。此外:
- .NET的
Aes类默认使用PKCS7填充,与多数在线工具默认配置一致,无需额外调整。 - ECB模式不需要初始化向量(IV),代码中未设置IV的逻辑是正确的。
内容的提问来源于stack exchange,提问作者user2713516
相关产品推荐
相关产品推荐

