Получение ключа для AES шифрования из строки - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, есть строка в формате string, имеющая 32 символа (хеш md5). Нужно эту строку преобразовать в byte[] 128bit, для использования в шифровании Aes.
Листинг программы
  1. string str = "Строка которую нужно шифровать";
  2. string key = "5f4dcc3b5aa765d61d8327deb882cf99";
  3. byte[] pass = System.Text.UTF8Encoding.UTF8.GetBytes(key); //Как правильно преобразовать строку для использования в Aes
  4. byte[] result = EncryptStringToBytesAes(str, pass, pass);
  5. public static byte[] EncryptStringToBytesAes(string plainText, byte[] Key, byte[] IV)
  6. {
  7. // Проверка аргументов
  8. if (plainText == null || plainText.Length <= 0)
  9. throw new ArgumentNullException("plainText");
  10. if (Key == null || Key.Length <= 0)
  11. throw new ArgumentNullException("Key");
  12. if (IV == null || IV.Length <= 0)
  13. throw new ArgumentNullException("IV");
  14. byte[] encrypted;
  15. // Создаем объект класса AES
  16. // с определенным ключом and IV.
  17. using (Aes aesAlg = Aes.Create())
  18. {
  19. aesAlg.Key = Key;
  20. aesAlg.IV = IV;
  21. // Создаем объект, который определяет основные операции преобразований.
  22. ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
  23. // Создаем поток для шифрования.
  24. using (var msEncrypt = new MemoryStream())
  25. {
  26. using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
  27. {
  28. using (var swEncrypt = new StreamWriter(csEncrypt))
  29. {
  30. //Записываем в поток все данные.
  31. swEncrypt.Write(plainText);
  32. }
  33. encrypted = msEncrypt.ToArray();
  34. }
  35. }
  36. }
  37.  
  38. //Возвращаем зашифрованные байты из потока памяти.
  39. return encrypted;
  40. }

Необработанное исключение типа "System.Security.Cryptography.CryptographicException" в mscorlib.dll Дополнительные сведения: Заданный вектор инициализации (IV) не соответствует размеру блоков для этого алгоритма.

Сейчас в голову приходит только разбивать string key на 2, чтобы получалось 16 символов и уже дальше преобразовывать в byte[] 128bit.

Решение задачи: «Получение ключа для AES шифрования из строки»

textual
Листинг программы
  1. string s = "8124D3";
  2. byte[] bytes = new byte[s.Length/2];
  3. for (int i=0; i<s.Length; i+=2)
  4. {
  5.     bytes[i/2] = Convert.ToByte(s.Substring(i,2), 16);
  6. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут