如何使用`HashAlgorithm.TransformBlock`的输出参数?

问题描述 投票:0回答:1

方法

HashAlgorithm.TransformBlock
采用参数
outputBuffer
outputOffset

我想不出这个方法有这些的理由。将散列数据复制到某个地方是否如此常见,以至于该复制成为此方法的一个组成部分?

我很好奇看到涉及这些输出参数的良好用例。

.net hash api-design
1个回答
7
投票

这显然是一个疏忽。 我找不到支持这一点的来源,但由于它代表了我们可以想象的任何用例(我无法想象任何实际用例),最多可以为开发人员节省一行代码。 更糟糕的是,任何(无论出于何种原因)确实想要制作自己的缓冲区副本的开发人员可能会发现TransformBlock不太可能为她做这件事,以至于她可能会自己编写该行代码!

outputBuffer

被其他

ICryptoTransforms
以合理的方式使用(例如,
作为输出缓冲区
),所以它确实应该包含 - 当不为空并且不覆盖输入缓冲区时 - 中间摘要,特别是因为它不是其他情况可以从课堂上获得。 (每当算法的输入出现在多个上下文中时,使中间摘要可用是一个好主意。) 我的猜测是:

关于何时应该抛出 IOException,有人在
    1.1
  1. 中得到了倒退。
  2. 2.0
  3. 中,有人“修复”了这个问题,但误读了规范并从inputBuffer而不是
    this.HashValue
    复制。
    中间摘要很少使用,以至于在 
  4. 4.0
  5. 之前没有人抱怨过。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.