在解密數據之前是否可以獲得解密數據的最終長度?以下是一個示例:CryptoStream的長度可以在解密之前確定嗎?
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();
此代碼已被簡化。源數據被加密並從GetDataStream()
方法中檢索爲Stream
。如果未包含content-length
標題,則瀏覽器將無法提供下載文件的完整百分比或時間估計。提前解密流是不成問題的,因爲流可能在千兆字節大小範圍內,並通過網絡讀取。