.NET 4.x Как правильно перевести ключ и вектор в байты Aes - C#
Формулировка задачи:
Всем здрасте. Прошу прощения если такая тема уже была, но я толком ответа не нашел. Такой вопрос: у меня есть информация, ключ и вектор. При шифровке данных ключ и вектор генерируются автоматически Aes классом. Этот ключ и вектор я перегоняю из массива байтов в string с удалением "-", чтобы ключ и вектор выглядели по-человечески и их можно было передавать кому-либо:
Это ладно. С этим я еще разобрался. А вот с расшифровкой все обстоит немного иначе... Как мне правильно перевести ключ и вектор в массив байтов, чтобы вот эти самые "-" вернулись на место? Ведь иначе при расшифровке просто напросто будет выбивать ошибку. Как я пытался делать: я переводил в массив байтов и пытался поставить эти "-" через каждые два символа, но так толком у меня ничего и не вышло. Вот как я пытался перевести, но при таком переводе, конечно же, вылетает ошибка, т.к. ключ и вектор уже имеют другую длину:
Прошу вашей помощи, господа. И извиняюсь за такое странное описание проблемы.
crypt_key.Text = BitConverter.ToString(keyi).Replace("-", String.Empty); crypt_iv.Text = BitConverter.ToString(ivi).Replace("-", String.Empty);
byte[] IV = Encoding.UTF8.GetBytes(cbc.Text); byte[] key = Encoding.UTF8.GetBytes(encryption_key.Text);
Решение задачи: «.NET 4.x Как правильно перевести ключ и вектор в байты Aes»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml.Serialization; using System.Runtime.Serialization; using System.Security.Cryptography; namespace loverd97AESDemo { class Program { static void Main(string[] args) { string text = "Hello World!"; AESData aesData = new AESData(); aesData.CreateData(); SaveAesDataToFile(aesData); AESData aesFromFile = CreateAesDataFromFile(); byte[] encrypted = EncryptString(text, aesFromFile); string outText = DecriptString(encrypted, aesFromFile); Console.WriteLine(outText); Console.ReadLine(); } static string DecriptString(byte[] inData, AESData aesData) { using (Aes aes = Aes.Create()) { aes.IV = aesData.AesIV; aes.Key = aesData.AesKey; using (ICryptoTransform decryptor = aes.CreateDecryptor()) { byte[] outData = decryptor.TransformFinalBlock(inData, 0, inData.Length); return Encoding.Default.GetString(outData); } } } static byte[] EncryptString(string text, AESData aesData) { byte[] outData=null; byte[] inData = Encoding.Default.GetBytes(text); using (Aes aes = Aes.Create()) { aes.IV = aesData.AesIV; aes.Key = aesData.AesKey; using (ICryptoTransform encryptor = aes.CreateEncryptor()) { outData = encryptor.TransformFinalBlock(inData, 0, inData.Length); } } return outData; } static AESData CreateAesDataFromFile() { XmlSerializer serializer = new XmlSerializer(typeof(AESData)); using (FileStream fs = File.OpenRead("AES.xml")) { AESData temp = (AESData)serializer.Deserialize(fs); return temp; } } static void SaveAesDataToFile(AESData aesData) { XmlSerializer serializer = new XmlSerializer(typeof(AESData)); using (FileStream fs = File.OpenWrite("AES.xml")) { serializer.Serialize(fs, aesData); } } } [Serializable] public class AESData { public AESData() { } public void CreateData() { RNGCryptoServiceProvider r = new RNGCryptoServiceProvider(); AesKey = new byte[0x20]; AesIV = new byte[0x10]; r.GetNonZeroBytes(AesKey); r.GetNonZeroBytes(AesIV); } public byte[] AesIV; public byte[] AesKey; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д