Ошибка CryptoStream Заполнение недопустимо и не может быть удалено
У меня проблема с моим кодом. Проблема возникает в функции Decryptor.
FlushFinalBlock throw "Padding недействителен и не может быть удален"
В функции Decryptor я получаю myData длиной 6048, когда строка cryptoStream.Write(myData, 0, myData.Length); сделано, я получаю длину 6032 в memoryStream и затем строку cryptoStream.FlushFinalBlock(); выдает ошибку "Заполнение недопустимо и не может быть удалено".
Как вы можете видеть, я использую Padding = PaddingMode.PKCS7;
static RijndaelManaged rmCrypto;
static object lockCryptoStream = new object();
public static void SetrmCrypto()
{
rmCrypto = new RijndaelManaged();
rmCrypto.Padding = PaddingMode.PKCS7;
rmCrypto.KeySize = 128;
rmCrypto.Key = new ASCIIEncoding().GetBytes("xxxxxxxxxxxxxxxx");
rmCrypto.IV = new ASCIIEncoding().GetBytes("yyyyyyyyyyyyyyyy");
}
public static byte[] Encryptor(byte[] myData)
{
lock (lockCryptoStream)
{
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, rmCrypto.CreateEncryptor(rmCrypto.Key, rmCrypto.IV), CryptoStreamMode.Write))
{
cryptoStream.Write(myData, 0, myData.Length);
cryptoStream.FlushFinalBlock();
cryptoStream.Close();
return memoryStream.ToArray();
}
}
}
}
public static byte[] Decryptor(byte[] myData)
{
lock (lockCryptoStream)
{
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, rmCrypto.CreateDecryptor(rmCrypto.Key, rmCrypto.IV), CryptoStreamMode.Write))
{
cryptoStream.Write(myData, 0, myData.Length);
cryptoStream.FlushFinalBlock();
cryptoStream.Close();
return memoryStream.ToArray();
}
}
}
}
Encryptor используется на сервере, а данные отправляются через UDP. Клиент использует Decryptor, чем расшифровывает данные. Код работает для большинства пакетов и, допустим, работает в течение нескольких часов, но через некоторое время я получаю эту ошибку на Flushing.
1 ответ
Верхний код прекрасно работает. проблема в моем случае была на сервере, который был набран в C++, и у меня были проблемы с этим шифрованием (проблемы с потоками при получении и отправке)