1

私は暗号化をいじっていましたが、これが私のバッファを変更することを発見しました。私はそれを期待していませんでした。

aesbuf を使用して MemoryStream を見ると、CanWrite を false に設定していることがわかります。それでも aesbuf は変更されます。b1 は true ですが、b2 は false であるため、わかります。

なんと!? どうしたの?

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);
4

1 に答える 1

2

あなたが持っている:

using (MemoryStream ms2 = new MemoryStream(aesbuf))

と:

ms2.Write(buf, 0, l);

そう...あなた自身のコードは、基礎となるバッファとしてMemoryStream使用している書き込み可能なものに書きました。aesbuf自傷行為。

于 2012-08-10T05:31:28.543 に答える