I was playing around with encryption and I discovered this modifies my buffer. I was NOT expecting that.
If you look at the MemoryStream with aesbuf you can clearly see i set CanWrite to false. Yet the aesbuf is modified. I know because b1 is true but b2 is false.
WTF!? Whats going on?
byte[] unencrypted_array;
var a1 = (byte[])aesbuf.Clone();
var b1 = a1.ArraysEqual(aesbuf);
using (MemoryStream ms2 = new MemoryStream(aesbuf))
using (var aes = new RijndaelManaged())
{
using (var dec = aes.CreateDecryptor(aeskey, aesiv))
using (MemoryStream ms = new MemoryStream(aesbuf, false))
using (CryptoStream sr = new CryptoStream(ms, dec, CryptoStreamMode.Read))
{
byte[] buf = new byte[1024 * 4];
int l;
while ((l = sr.Read(buf, 0, buf.Length)) != 0)
{
ms2.Write(buf, 0, l);
}
}
ms2.Flush();
unencrypted_array = ms2.ToArray();
}
var b2 = a1.ArraysEqual(aesbuf);
You have:
and:
so… your own code wrote to a writeable
MemoryStreamthat is usingaesbufas the underlying buffer. Self-inflicted.