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

时间:2011-01-28 19:25:45

标签: .net api

方法HashAlgorithm.TransformBlock采用参数outputBufferoutputOffset

我想不出这种方法的原因。将散列数据复制到某个地方是否如此常见,以致副本成为此方法不可或缺的一部分?

我很想看到一个涉及这些输出参数的好用例。

1 个答案:

答案 0 :(得分:7)

这显然是一种疏忽。我找不到支持这个的来源,但是我们可以想象(我无法想象任何实际用例)任何用例最多可以保存开发人员最多一行代码。更糟糕的是,任何开发人员(无论出于什么原因)确实想要自己创建缓冲区的副本,可能会发现TransformBlock不太可能为她做这件事,以至于她自己也可能自己编写这行代码! / p> 其他outputBuffer以合理的方式使用

ICryptoTransforms(例如作为输出缓冲区),因此它确实应该包含 - 当不为空且不覆盖输入时缓冲区 - 中间摘要,特别是因为它不能从类中获得。 (只要算法的输入出现在多个上下文中,就可以使中间摘要可用。)

我的猜测是:

  1. 有人在1.1中反复询问是否应该抛出IOException。
  2. 2.0中,有人“修复”了该问题,但误读了规范并从inputBuffer而不是this.HashValue进行了复制。
  3. 很少使用中间摘要,没有人在4.0之前抱怨过。