Получение ключа для 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д