.net 如何使用“HashAlgorithm.TransformBlock”的输出参数?
该方法采用参数.net 如何使用“HashAlgorithm.TransformBlock”的输出参数?,.net,api,.net,Api,该方法采用参数outputBuffer和outputfoffset 我想不出有什么理由让这种方法拥有这些。将散列数据复制到某个地方是如此普遍,以至于该复制成为该方法不可分割的一部分吗 我很想看到一个包含这些输出参数的好用例。这显然是一个疏忽。我找不到支持这一点的源代码,但就目前情况而言,我们可以想象的任何用例(我无法想象任何实际用例)最多可以为开发人员节省一行代码。更糟糕的是,任何开发人员(无论出于何种原因)想要自己制作一份缓冲区副本,都可能会发现TransformBlock不太可能为她这样做,
outputBuffer
和outputfoffset
我想不出有什么理由让这种方法拥有这些。将散列数据复制到某个地方是如此普遍,以至于该复制成为该方法不可分割的一部分吗
我很想看到一个包含这些输出参数的好用例。这显然是一个疏忽。我找不到支持这一点的源代码,但就目前情况而言,我们可以想象的任何用例(我无法想象任何实际用例)最多可以为开发人员节省一行代码。更糟糕的是,任何开发人员(无论出于何种原因)想要自己制作一份缓冲区副本,都可能会发现
TransformBlock
不太可能为她这样做,以至于她可能会自己编写这行代码
outputBuffer
被其他ICryptoTransforms
以合理的方式使用(例如,作为输出缓冲区),因此它确实应该包含中间摘要(当不为null且不覆盖输入缓冲区时),特别是因为它在类中不可用。(每当算法的输入出现在多个上下文中时,让中间摘要可用是一个好主意。)
我的猜测是:
inputBuffer
而不是this.HashValue
复制了该规范此外,文档没有提到实际上可以将
outputBuffer
设置为null
以避免复制,并坚持认为“使用不同的输入和输出数组调用TransformBlock
方法会导致IOException
”,这是不正确的。API设计处于最佳状态!虽然在.net中很常见…是的,通过反射器查看后,我不知道。哦,对了。这是因为它实现了一个ICryptoTransform
方法,用于生成输出的东西。我应该注意到……更糟糕的是,IDE中的方法摘要说,实际上是写入输出数组的散列。看这个:在阅读了这个问题和一篇博客文章,其中展示了如何将哈希与加密流
一起使用后,似乎其意图可能是使哈希算法
进行某种类似的转换,即不修改通过它的数据,而是截取它的一个副本作为哈希。