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