.net 如何使用“HashAlgorithm.TransformBlock”的输出参数?

.net 如何使用“HashAlgorithm.TransformBlock”的输出参数?,.net,api,.net,Api,该方法采用参数outputBuffer和outputfoffset 我想不出有什么理由让这种方法拥有这些。将散列数据复制到某个地方是如此普遍,以至于该复制成为该方法不可分割的一部分吗 我很想看到一个包含这些输出参数的好用例。这显然是一个疏忽。我找不到支持这一点的源代码,但就目前情况而言,我们可以想象的任何用例(我无法想象任何实际用例)最多可以为开发人员节省一行代码。更糟糕的是,任何开发人员(无论出于何种原因)想要自己制作一份缓冲区副本,都可能会发现TransformBlock不太可能为她这样做,

该方法采用参数
outputBuffer
outputfoffset

我想不出有什么理由让这种方法拥有这些。将散列数据复制到某个地方是如此普遍,以至于该复制成为该方法不可分割的一部分吗


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

这显然是一个疏忽。我找不到支持这一点的源代码,但就目前情况而言,我们可以想象的任何用例(我无法想象任何实际用例)最多可以为开发人员节省一行代码。更糟糕的是,任何开发人员(无论出于何种原因)想要自己制作一份缓冲区副本,都可能会发现
TransformBlock
不太可能为她这样做,以至于她可能会自己编写这行代码

outputBuffer
被其他
ICryptoTransforms
以合理的方式使用(例如,作为输出缓冲区),因此它确实应该包含中间摘要(当不为null且不覆盖输入缓冲区时),特别是因为它在类中不可用。(每当算法的输入出现在多个上下文中时,让中间摘要可用是一个好主意。)

我的猜测是:

  • 有人在IOException应该何时抛出的问题上搞砸了
  • 在中,有人“修复”了该问题,但误读了规范并从
    inputBuffer
    而不是
    this.HashValue
    复制了该规范
  • 中间消化液很少使用,以前没有人抱怨过

  • 此外,文档没有提到实际上可以将
    outputBuffer
    设置为
    null
    以避免复制,并坚持认为“使用不同的输入和输出数组调用
    TransformBlock
    方法会导致
    IOException
    ”,这是不正确的。API设计处于最佳状态!虽然在.net中很常见…是的,通过反射器查看后,我不知道。哦,对了。这是因为它实现了一个
    ICryptoTransform
    方法,用于生成输出的东西。我应该注意到……更糟糕的是,IDE中的方法摘要说,实际上是写入输出数组的散列。看这个:在阅读了这个问题和一篇博客文章,其中展示了如何将哈希与
    加密流
    一起使用后,似乎其意图可能是使
    哈希算法
    进行某种类似
    的转换,即不修改通过它的数据,而是截取它的一个副本作为哈希。