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

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

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

Здравствуйте, есть строка в формате string, имеющая 32 символа (хеш md5). Нужно эту строку преобразовать в byte[] 128bit, для использования в шифровании Aes.
string str = "Строка которую нужно шифровать";
string key = "5f4dcc3b5aa765d61d8327deb882cf99";  
byte[] pass = System.Text.UTF8Encoding.UTF8.GetBytes(key); //Как правильно преобразовать строку для использования в Aes
byte[] result = EncryptStringToBytesAes(str, pass, pass);
 
public static byte[] EncryptStringToBytesAes(string plainText, byte[] Key, byte[] IV)
        {
            // Проверка аргументов
            if (plainText == null || plainText.Length <= 0)
                throw new ArgumentNullException("plainText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");
            byte[] encrypted;
 
            // Создаем объект класса AES
            // с определенным ключом and IV.
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;
 
                // Создаем объект, который определяет основные операции преобразований.
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
 
                // Создаем поток для шифрования.
                using (var msEncrypt = new MemoryStream())
                {
                    using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (var swEncrypt = new StreamWriter(csEncrypt))
                        {
                            //Записываем в поток все данные.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }

            //Возвращаем зашифрованные байты из потока памяти.
            return encrypted;
 
        }

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

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

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

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

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


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

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

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