gpt4 book ai didi

c# - CryptoStream 的长度可以在解密前确定吗?

转载 作者:行者123 更新时间:2023-11-30 17:46:25 26 4
gpt4 key购买 nike

在解密之前是否可以得到解密数据的最终长度?这是一个例子:

RijndaelManaged RMCrypto = new RijndaelManaged();
RMCrypto.Padding = PaddingMode.ISO10126;
Response.Buffer = false;
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-length", ??????);
CryptoStream crypto = new CryptoStream(Response.OutputStream, RMCrypto.CreateDecryptor(Key, IV), CryptoStreamMode.Write);
using (Stream orig = GetDataStream())
{
int bufferSize = 100000;
int bytesReceived = bufferSize;
byte[] buffer = new byte[bufferSize];
while (bytesReceived == bufferSize)
{
bytesReceived = orig.Read(buffer, 0, bufferSize);
crypto.Write(buffer, 0, bytesReceived);
}
crypto.FlushFinalBlock();
}
Response.End();

此代码已被简化。源数据被加密并作为 StreamGetDataStream() 方法中检索。如果未包含 content-length header ,浏览器将无法给出下载文件的完成百分比或时间估计。提前解密流是不可能的,因为流的大小可能在千兆字节范围内,并且是通过网络读取的。

最佳答案

如果您知道正在使用的分组密码模式和填充模式,那么是的,可以提前确定长度。 (例如,如果您使用 CBC,那么您可以使用倒数第二个密文 block 作为 IV,最后一个密文 block 作为实际密文,然后计算存在多少个填充字节。)

大多数开发人员只会说“???”在上面并以更简单的方式解决问题:在初始加密过程中将明文长度存储在某处。

关于c# - CryptoStream 的长度可以在解密前确定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com