我很抱歉这个令人困惑的标题,老实说,我不知道该怎么称呼它!我在考虑这是否属于安全/加密交换网站之一,但由于这主要是一个编程问题,我将在此处发布。随意移动它!
我有一个 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;
}
}
}
我的意思是安全的,它总是会产生正确的解密数据吗?