Как мне преобразовать мой байт [], чтобы AES не ломал изображение во время шифрования?Я пытаюсь зашифровать изображение с помощью AES.Но размер по умолчанию для AES - 128, а не 256. Поэтому, когда я шифрую свое изображение, оно исходит из байта []. Длиной 13 000.До байта []. Длина 21 000.Затем байт [] дешифруется и по-прежнему имеет длину 21 000 и не отображается.
Поэтому я пытаюсь настроить массив изображений byte [] до того, как он зашифрован и перестанет работать в AES.Я возвращаю значения из менеджера шифрования, который я сделал с помощью UTF8.Так что это также сбивает с толку.
Если исходный массив имел 4 значения, скажем, 126, 126, 126, 125. Массив байтов возвращается из диспетчера шифрования с теми же 4 значениями.Но если вы отправите 128, 129, 129, 129, 129. Возвращенный байт [] будет в три раза длиннее, в 12, со значениями в 40/50.
public static byte[] Encrypt(this byte[] information, byte[] keyPass)
{
byte[] key = new byte[keyPass.Length + temp.Length];
Buffer.BlockCopy(keyPass, 0, key, 0, temp.Length);
Buffer.BlockCopy(temp, 0, key, keyPass.Length, temp.Length);
// Make sure parameters are valid
CheckParams(information, key);
Console.WriteLine("KeyCheck");
byte[] encrypted;
string infoString = Encoding.Default.GetString(information);
// Create AES object using key
using (Aes aes = Aes.Create())
{
aes.Key = key;
// Create encryptor
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
// Create streams
using (MemoryStream memoryStream = new MemoryStream())
{
memoryStream.Write(aes.IV, 0, aes.IV.Length);
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
using (StreamWriter streamWriter = new StreamWriter(cryptoStream))
{
streamWriter.Write(infoString);
}
encrypted = memoryStream.ToArray();
}
}
// Return encrypted bytes
return encrypted;
}
public static byte[] Decrypt(this byte[] encrypted, byte[] keyPass)
{
byte[] key = new byte[keyPass.Length + temp.Length];
Buffer.BlockCopy(keyPass, 0, key, 0, temp.Length);
Buffer.BlockCopy(temp, 0, key, keyPass.Length, temp.Length);
// Make sure parameters are valid
CheckParams(encrypted, key);
Console.WriteLine("KeyCheck");
string decrypted;
// Create AES object using key
using (Aes aes = Aes.Create())
{
aes.Key = key;
// Create streams
using (MemoryStream memoryStream = new MemoryStream(encrypted))
{
byte[] iv = new byte[16];
memoryStream.Read(iv, 0, iv.Length);
// Create decryptor
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, iv);
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
using (StreamReader streamReader = new StreamReader(cryptoStream))
{
decrypted = streamReader.ReadToEnd();
}
}
}
// Return decrypted bytes
byte[] decryptedbytes = Encoding.UTF8.GetBytes(decrypted);
return decryptedbytes;
}
Я хочу иметь возможностьзашифровать, а затем расшифровать изображение в AES.Если я попытаюсь установить aes.KeySize и aes.BlockSize.Это ломает приложение.