Хорошо, это странно для меня.У меня есть этот код, который работает:
using (MemoryStream memStream = new MemoryStream(inBytes))
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
using (CryptoStream cs = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read))
{
byte[] buffer;
if (inBytes.Length < (1024 * 10)) buffer = new byte[inBytes.Length];
else buffer = new byte[(1024 * 10)];
long readBytes = 0;
long totalBytes = inStream.Length;
int currBytes;
while (readBytes < totalBytes)
{
currBytes = cs.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, currBytes);
readBytes += currBytes;
}
}
Это записывает дешифрованные данные в файл.
Затем у меня есть этот код, который делает то же самое, кроме как пишет (возвращает) a MemoryStream
:
using(MemoryStream memStream = new MemoryStream(inBytes))
using(MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read))
{
byte[] buffer;
if (inBytes.Length < (1024 * 10)) buffer = new byte[inBytes.Length];
else buffer = new byte[(1024 * 10)];
long readBytes = 0;
long totalBytes = inStream.Length;
int currBytes;
while (readBytes < totalBytes)
{
currBytes = cs.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, currBytes);
readBytes += currBytes;
}
return ms;
}
В строке currBytes = cs.Read(buffer, 0, buffer.Length)
я получаю сообщение об ошибке «Длина данных для расшифровки недопустима», но только во втором наборе, а не в первом.ICryptoTransform
«расшифровщик» создается из общего метода, и я знаю, что он использует тот же ключ.
Может кто-нибудь сказать мне, почему я не получаю эту ошибку в первом случае, но будет ввторое, и (что более важно), как это исправить.
И, да, я знаю, что DES не самый лучший метод шифрования.Это нечто вроде доказательства концепции, которое никогда не увидит свет в производственной среде.