Не могу изменить ключ для шифрования и расшифровки пишет ошибку:
Rijndael заданный вектор инициализации iv не соответствует размеру блоков для этого алгоритма
Если использую ключ @"myKey123"
то всё нормально шифруется и расшифровывается
Код:
public class FlObf
{
private static readonly string Password = @"Test123"; // @"myKey123"
// симметричный алгоритм шифрования Rijndael
public static void EncryptFile(string inputFile, string outputFile)
{
try
{
var UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(Password);
string cryptFile = outputFile;
using (var fsCrypt = new FileStream(cryptFile, FileMode.Create))
using (var RMCrypto = new RijndaelManaged())
using (var cs = new CryptoStream(fsCrypt, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write))
{
using (var fsIn = new FileStream(inputFile, FileMode.Open))
{
int data;
while ((data = fsIn.ReadByte()) != -1)
{
cs.WriteByte((byte)data);
}
}
}
}
catch (Exception ex) { Console.WriteLine(ex.Message); }
}
// симметричный алгоритм расшифрования Rijndael
public static void DecryptFile(string inputFile, string outputFile)
{
try
{
var UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(Password);
using (var fsCrypt = new FileStream(inputFile, FileMode.Open))
using (var RMCrypto = new RijndaelManaged())
using (var cs = new CryptoStream(fsCrypt, RMCrypto.CreateDecryptor(key, key), CryptoStreamMode.Read))
{
using (var fsOut = new FileStream(outputFile, FileMode.Create))
{
int data;
while ((data = cs.ReadByte()) != -1)
{
fsOut.WriteByte((byte)data);
}
}
}
}
catch (Exception ex) { Console.WriteLine(ex.Message); }
}
Вы используете ключ и в качестве ключа, и в качестве вектора инициализации IV:
RMCrypto.CreateEncryptor(key, key)
Второй аргумент здесь - на самом деле IV вектор, случайно сгенеренные 16 байт. Иногда у вас длины ключа не хватает, поэтому происходит ошибка. Но вообще сама логика неверна и нужно добавить IV вектор и передавать его в качестве второго аргумента.
В .NET Framework допустимый размер IV для RijndaelManaged - 128, 192 или or 256 бит.
In .NET Framework, this algorithm supports block sizes of 128, 192, or 256 bits; defaulting to 128 bits
В переводе на строку UTF16 - 8, 12 или 16 символов. Как верно заметил demonplus, вам нужно разделить получение ключа и IV и генерировать IV допустимого размера.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я ищу реализацию БПФ наNET-совместных языках
У меня есть две таблицы Timetable и Services связанные по ID_ServiceTimetable представлена как DataGrid
Всем здравствуйте, вопрос следующийК программе на с# подключена БД из Microsoft SQL Server, в DataGridView выводится таблица
Есть таблица, в ней есть колонка meta_key и meta_value Вот запр