方法HashAlgorithm.TransformBlock采用参数outputBufferoutputOffset

我想不出采用这种方法的理由。将散列数据复制到某个地方是否很常见,以至于复制成为该方法不可或缺的一部分?

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

最佳答案

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

outputBuffer由其他ICryptoTransforms以合理的方式使用(例如,用作输出缓冲区),因此它实际上应包含-当不为null且不覆盖输入缓冲区时-中间摘要,尤其是因为它无法从中间获得类。 (只要算法的输入出现在多个上下文中,则使中间摘要可用是个好主意。)

我的猜测是:


关于何时应该抛出IOException,有人在1.1中将其弄倒了。
2.0中,有人“解决”了该问题,但误读了规范并从inputBuffer而不是this.HashValue复制。
很少使用中间摘要,因此在4.0之前没有人抱怨过。

关于.net - 如何使用“HashAlgorithm.TransformBlock”的输出参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4832225/

10-11 22:58