gpt4 book ai didi

c# Computing Hashes - 在多个流之间保持状态

转载 作者:太空宇宙 更新时间:2023-11-03 13:22:05 26 4
gpt4 key购买 nike

我目前正在实现分块文件上传。理想情况下,我想计算上传文件的 SHA1 哈希值。但是,我将文件直接流式传输到位于远程位置的数据库,因此每次访问它都会影响性能。

我正在使用以下代码来计算在我们的离线应用程序中使用的单个批量上传的哈希值:

...
...
using (var uploadStream = SqlDataUploadStream.Create(initial, subsequent))
using (var sha1Hasher = System.Security.Cryptography.SHA1.Create())
using (var hashStream = new CryptoStream(uploadStream, sha1Hasher, CryptoStreamMode.Write))
{
...
Copy to hashStream here...
...
}

当然,由于通过 HTTP 的上传是分块的,因此没有一个连续的流可供我计算哈希值。

但是,如果我能以某种方式获取和设置散列类本身的内部状态,我就可以在 block 帖子之间保留状态并像那样计算散列,而不必在最后返回数据库读取整个内容再次。不幸的是,快速浏览一下 SHA1 类的 MSDN 页面,我没有想到可以用来获取内部状态。

我可以在 session 中保留整个哈希类,但由于它想要被处置,我有点厌倦了这样做,以防出现问题并且我没有机会手动处置它。

那么,有什么方法可以获取内部状态吗?

最佳答案

如果您想保留哈希状态,请使用 SHA1Managed(无需处置)或仅使用其他一些库。尽管 SHA1ManagedIDisposable,但其实现中没有任何内容利用了这一事实。

您提到将其放入 session 中。这是一件肮脏的事情,因为现在用户只能有一个并发上传。我想说的是 session 滥用的典型案例。我宁愿将哈希状态存储在您正在创建的 blob 旁边的数据库中。

关于c# Computing Hashes - 在多个流之间保持状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23783156/

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