Шифрование Aes в .net Core 3.0 «Указанный ключ не подходит для этого алгоритма».

Используя .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.'

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


person Fritjof Berggren    schedule 24.05.2019    source источник
comment
Прочтите документы — у AES есть необходимая минимальная длина ключа.   -  person 500 - Internal Server Error    schedule 24.05.2019
comment
Да, но как преобразовать любой размер ключа во что-то, что AES может принять в качестве ключа? Здесь немного больше: docs.microsoft.com/en-us/dotnet/api/   -  person Fritjof Berggren    schedule 24.05.2019
comment
Пароль не является ключом AES. Используйте некоторый хеш-алгоритм для пароля, который дает вам постоянный размер, который вы можете использовать   -  person Camilo Terevinto    schedule 24.05.2019
comment
stackoverflow.com/questions/2659214/   -  person steve16351    schedule 24.05.2019


Ответы (1)


Здесь вы ошиблись — var key = Encoding.UTF8.GetBytes("mysmallkey"); см. документацию здесь Aes Class и Документация 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
person Sunil Dhappadhule    schedule 25.05.2019
comment
Рада помочь..! - person Sunil Dhappadhule; 28.05.2019