首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ReadOnlySpan<byte>的Hashalgorithm算法

基于ReadOnlySpan<byte>的Hashalgorithm算法
EN

Stack Overflow用户
提问于 2019-05-18 21:14:29
回答 1查看 588关注 0票数 2

我正在改写我的申请以求速度。它基本上使用生产者/消费者模式来处理文件数据,例如并行计算多个散列。

其中一个更改是从byte[]块切换到ReadOnlySpan。这导致了一些不错的加速和代码简化。

这里只有一个市长的陷阱:

我不得不删除框架支持的所有HashAlgorithms,因为到目前为止,它们还不支持处理部分Span数据。如果将数据复制到字节数组中,则要删除它们,否则将受到损失。唯一支持Span的方法是TryComputeHash,它需要完整的数据。由于要处理的文件可能很大,这对我来说是没有用的。

我的问题是:

有什么(可能是不安全的)“黑客”可以用来将跨范围数据传递给HashAlgorithm对象吗?

代码语言:javascript
复制
protected override void DoWork(CancellationToken ct) {
    HashAlgorithm.Initialize();

    ReadOnlySpan<byte> block;
    int bytesProcessed;
    do {
        ct.ThrowIfCancellationRequested();

        block = Reader.GetBlock(ReadLength);
        //Make this work
        bytesProcessed = HashAlgorithm.TransformBlock((byte[])block, 0, block.Length, null, 0); 
    } while(Reader.Advance(bytesProcessed) && bytesProcessed != 0);

    var lastBytes = block.Length - bytesProcessed;
    //Make this work
    HashValue = HashAlgorithm.TransformFinalBlock((byte[])block.Slice(bytesProcessed, lastBytes), 0, lastBytes).ToArray(); 
    Reader.Advance(lastBytes);
}
EN

回答 1

Stack Overflow用户

发布于 2019-11-07 10:09:27

对于您的情况,建议使用增量散列。它可以用Span<byte>类型的连续数据进行处理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56202907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档