我尝试将 CryptoStream 与 AWS .NET SDK 一起使用,但失败了,因为 CryptoStream 不支持查找。我在某处读到内容长度已知我们应该能够将这些功能添加到 CryptoStream 中。我想知道如何做到这一点;任何示例代码也将很有用。
我有一个像这样的方法,它通过 FieStream 传递并返回 cryptoStream。我将返回的 Stream 对象分配给 AWS SDk PutObjectRequest 对象的 InputStream。
public static Stream GetEncryptStream(Stream existingStream,
SymmetricAlgorithm cryptoServiceProvider,
string encryptionKey, string encryptionIV)
{
Stream existingStream = this.dataStream;
cryptoServiceProvider.Key = ASCIIEncoding.ASCII.GetBytes(encryptionKey);
cryptoServiceProvider.IV = ASCIIEncoding.ASCII.GetBytes(encryptionIV);
CryptoStream cryptoStream = new CryptoStream(existingStream,
cryptoServiceProvider.CreateEncryptor(), CryptoStreamMode.Read);
return cryptoStream ;
}
通常,对于加密,输入字节和输出字节之间不存在 1:1 映射,因此为了寻找向后(特别是)它必须做很多工作 - 甚至可能直接回到开始并继续处理数据以消耗 [n] 个字节解密的溪流。即使它知道每个字节映射到哪里,加密的状态也取决于它之前的数据(它不是解码器环;p),所以同样 - 它要么必须从头开始读取(并且重置回初始化向量),否则它将必须跟踪位置和加密状态的快照,并返回到最近的快照,然后向前走。大量的工作和存储。
这也适用于相对于任一端的搜索。
从current位置不会太差,但你又必须process数据 - 不仅仅是跳转基本流的位置。
没有一个good大多数消费者都可以使用的实现方法 - 通常如果你得到一个true
from CanSeek
这意味着“随机访问”,但在这种情况下效率不高。
作为解决方法 - 考虑将解密的数据复制到MemoryStream
或文件;然后您可以以随机访问方式访问完全解密的数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)