ranio Ответов: 0

Как сделать генерацию ключей AES в C#?


Я делаю генерацию ключей AES в c# и передаю ключ, сгенерированный для 128-битного шифрования AES. Дело в том, что при генерации ключа я получаю длину байта как 16, а длина строки ключа становится выше 16. При попытке онлайн я получаю длину как 16 сам по себе.

Что я уже пробовал:

Основной код выглядит следующим образом:
Ключ AES 128 битная генерация
System.Security.Cryptography.AesCryptoServiceProvider crypto = new System.Security.Cryptography.AesCryptoServiceProvider();
crypto.KeySize = 128;
crypto.BlockSize = 128;
crypto.GenerateKey();
byte[] keyGenerated = crypto.Key;
Key = Convert.ToBase64String(keyGenerated);


Шифрование ключа AES 128 битное
RijndaelManaged aes = new RijndaelManaged();
         aes.BlockSize = 128;
         aes.KeySize = 128;

         /// In Java, Same with below code
         /// Cipher _Cipher = Cipher.getInstance("AES");  // Java Code
         aes.Mode = CipherMode.ECB;

         byte[] keyArr = Convert.FromBase64String(keyStr);
         byte[] KeyArrBytes16Value = new byte[16];
         Array.Copy(keyArr, KeyArrBytes16Value, 16);

         aes.Key = KeyArrBytes16Value;

         ICryptoTransform encrypto = aes.CreateEncryptor();

         byte[] plainTextByte = ASCIIEncoding.UTF8.GetBytes(PlainText);
         byte[] CipherText = encrypto.TransformFinalBlock(plainTextByte, 0, plainTextByte.Length);
         return Convert.ToBase64String(CipherText);

Bjørn

Привет, ранио, в чем именно заключается твой вопрос? Вы спрашиваете, почему существует разница в длине массива байтов и строки Base64?

ranio

Длина байтов равна 16, но при преобразовании байтов в строку base64 длина ключа AES, сгенерированного со 128 битами, изменяется. Она становится больше, чем 64. Длина строки ключа AES для 128 бит всегда должна быть 16.

Bjørn

Привет, ранио, я не могу воссоздать это поведение. Представление Base64 из 16 байт всегда должно быть длиной 24 символа (так как оно использует только 6 из 8 бит), и используя Ваш пример кода, я всегда получаю ровно 24 символа для ключа с кодировкой Base64, который всегда декодируется обратно ровно до 16 байт. Используете ли вы другой код, чем опубликованный выше? Или вы делаете что-нибудь еще с ключом, прежде чем он будет записан в keyStr?

0 Ответов