阅读大量的“;计数”;的字节,然后将它们复制到一个新的数组中

本文关键字:复制 一个 数组 计数 然后 字节 | 更新日期: 2023-09-27 17:59:13

很抱歉这个令人困惑的标题,我真的不知道该怎么称呼它!我一直在想这是否属于某个安全/加密交换网站,但由于这主要是一个编程问题,我将在这里发布。请随意移动!

我有一个AES加密流,当AES用块填充原始数据时,生成的加密数据几乎总是与原始未加密数据大小不同。解密时,您需要知道从加密流中读取多少字节(有多少未加密的字节)。我本来打算在数据包中发送原始的、未加密的数据长度,但后来我想到了另一种方法。如果我只是从Crypto Stream中读取4096个字节,并存储实际读取的字节数,那么我就可以将正确的字节数复制到一个新数组中并使用它。

这样做安全吗?我的代码如下:

using (ICryptoTransform crypt = AES.CreateDecryptor())
{
    using (MemoryStream memStrm = new MemoryStream(data))
    {
        using (CryptoStream cryptStrm = new CryptoStream(memStrm, crypt, CryptoStreamMode.Read))
        {
            byte[] bytes = new byte[size];
            int read = cryptStrm.Read(bytes, 0, 4096);
            byte[] temp = new byte[read];
            Array.Copy(bytes, temp, read);
            return temp;
        }
    }
}

我所说的安全是指,它总是会产生正确的解密数据吗?

阅读大量的“;计数”;的字节,然后将它们复制到一个新的数组中

你为什么要经历这么多困难?MemoryStream,CryptoStream,临时数组。。。

return crypt.TransformFinalBlock(data, 0, data.Length);

为了确保加密货币的安全,您还应该为每次加密使用随机IV,并与密文一起存储。在先加密后MAC的结构中添加MAC(如HMAC-SHA-256)可以防止许多主动攻击,包括填充oracles。