Я пишу простую реализацию AES и хочу использовать онлайн-шифраторы AES для проверки. Однако при вводе одной и той же конфигурации (тот же ключ, режим ECB, размер ключа 256) я всегда получаю разные выходные строки (как для base64, так и для шестнадцатеричного). Однако все онлайн-шифровальщики выводят одну и ту же зашифрованную строку, поэтому они выровнены. Что мне не хватает?
Ссылки на онлайн-инструменты: https://devglan.com/online-tools/aes-encryption-decryption и https://anycript.com/crypto
Мой код
using System;
using System.IO;
using System.Security.Cryptography;
namespace AesApp
{
internal class Program
{
static void Main(string[] args)
{
using (Aes myAes = Aes.Create())
{
myAes.Mode = CipherMode.ECB;
myAes.Key = Convert.FromBase64String("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}");
}
}
}
}
}
}
конфигурация:
ECB mode,
256 key size,
sample key string = "gHyP6i8mXqmdFK4rKsKP7EqvzfxwbtyE",
sample plaintext to encrypt = "test",
My output = "/Ylo00TXuzmuBNYPZy5YOA= = "
Online output = "yyO1N4G9uxXJlQ8FLU3KfQ= = "





Размер ключа 256 означает, что длина ключа составляет 256 бит (32 байта). Поскольку ваша примерная строка ключа уже имеет длину 32 байта, декодирование с помощью Base64 приведет к тому, что длина ключа станет 192 бита (24 байта). Поэтому вам следует использовать такие методы, как Encoding.UTF8.GetBytes, для преобразования ключевой строки в массив байтов, а не использовать FromBase64String.
Вы декодируете ключ как base64, а это не то же самое, что онлайн-сайты, подобные тем, которые вы упомянули, декодируют, они декодируют ключ как ASCII. Если вы хотите получить ту же ценность, что и онлайн-сайты, вам следует использовать следующий код:
myAes.Key = System.Text.Encoding.ASCII.GetBytes("gHyP6i8mXqmdFK4rKsKP7EqvzfxwbtyE");
Кстати, код, который вы написали, не ошибочный и правильный, просто размер вашего ключа не 256, а 192-битный.