我有一个加密的文件,我首先对其进行解密,然后使用MemoryStream
和BinaryFormatter
尝试将其反序列化,但是当我尝试将反序列化的文件赋值给列表时,会出现OutOfMemoryException
(该文件非常小- 17KB)以下是代码:
byte[] encryptedData = File.ReadAllBytes(fileName);
byte[] result = Decrypt(Algo, key, vector, encryptedData) ;
BinaryFormatter ser = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream(result)) {
try {
files = ser.Deserialize(ms) as List<IItem>;
} catch (OutOfMemoryException) {
} catch (SerializationException) {
MessageBox.Show("Incorrect password!");
return;
}
}
files = ser.Deserialize(ms) as List<IItem>;
- 这是导致异常的原因
加密文件大小为1696
解密后大小为1691 - 正常大小。
以下是解密代码
public byte[] Decode(byte[] data)
{
string key = ASCIIEncoding.ASCII.GetString(rc2.Key);
string IV = ASCIIEncoding.ASCII.GetString(rc2.IV);
ICryptoTransform decryptor = rc2.CreateDecryptor(rc2.Key,rc2.IV);
StringBuilder roundtrip = new StringBuilder();
using (MemoryStream msDecrypt = new MemoryStream(data))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
int b = 0;
do
{
b = csDecrypt.ReadByte();
if (b != -1)
{
roundtrip.Append((char) b);
}
} while (b != -1);
}
}
byte[] decrypted = ASCIIEncoding.ASCII.GetBytes(roundtrip.ToString());
return decrypted;
}
ms.Length
吗(或在调试器中检查)?首先将其反序列化为一个对象,然后在调试器中查看实际类型(鼠标悬停并查看类型,或在监视窗口中使用variable.GetType()
函数)。 - Ron Beyer