好吧,这对我来说很奇怪。我有这个代码,它有效:
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 并不是最好的加密方法。这是概念验证性质的东西,在生产环境中永远不会出现。