Шифрование Aes в .net Core 3.0 «Указанный ключ недопустим для этого алгоритма». - PullRequest
1 голос
/ 24 мая 2019

Использование .Net Core 3.0 Я хочу зашифровать некоторый текст, используя любую длину пароля в качестве ключа шифрования:

using (Aes myAes = Aes.Create())
{
   var key = Encoding.UTF8.GetBytes("mysmallkey");
   myAes.Key = key; //ERROR
}

Я получаю сообщение об ошибке:

System.Security.Cryptography.CryptographicException: 'Specified key is not a valid size for this algorithm.'

Что я делаю не так? Спасибо.

1 Ответ

1 голос
/ 25 мая 2019

Вы ошиблись здесь- var key = Encoding.UTF8.GetBytes("mysmallkey"); См. Документацию здесь. Класс Aes и Документация AES

Я предлагаю вам, используя LegalKeySizes property в классе AES, вы можете проверить действительный размер вашего ключа. Допустимые размеры ключей определяются конкретной реализацией симметричного алгоритма и перечислены в свойстве LegalKeySizes.

 public virtual KeySizes[] LegalKeySizes { get; }

Вы получите следующий вывод

var key = Encoding.UTF8.GetBytes("mysmallkey");
  //myAes.Key = Key; //ERROR
   KeySizes[] ks = myAes.LegalKeySizes;
   foreach (KeySizes item in ks)
   {
    Console.WriteLine("Legal min key size = " + item.MinSize);
    Console.WriteLine("Legal max key size = " + item.MaxSize);
    //Output
    // Legal min key size = 128
    // Legal max key size = 256
   }

если вы используете 128 bit then Length of secret key should be 16 for 128 bits key size Попробуйте это

 var key = Encoding.UTF8.GetBytes("mysmallkey123456");

Для 192-битного - длина секретного ключа должна быть 24 для 192-битного ключа Размер образца ключа будет таким:

mysmallkey12345512987651 

для 256 бит - длина секретного ключа должна быть 32 для ключа 256 бит размер образца ключа

mysmallkey1234551298765134567890
...