gpt4 book ai didi

c# - 如何向 CryptoStream 添加查找和定位功能

转载 作者:太空狗 更新时间:2023-10-29 18:19:14 24 4
gpt4 key购买 nike

我试图将 CryptoStream 与 A​​WS .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),所以再次 - 它要么必须从头开始读取(并且重置回初始化向量),否则它必须跟踪位置和加密状态的快照,并返回到最近的快照,然后向前走。大量工作和存储。

这也适用于相对于任一端的搜索。

当前位置向前移动并不会太糟糕,但是您必须再次处理数据 - 而不仅仅是跳转基本流的位置。

没有一个好的方法来实现大多数消费者可以使用的 - 通常如果你从 CanSeek 得到一个 true 这意味着“随机访问”,但在这种情况下效率不高。

作为解决方法——考虑将解密数据复制到MemoryStream 或文件中;然后您可以以随机访问的方式访问完全解密的数据。

关于c# - 如何向 CryptoStream 添加查找和定位功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5026409/

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