我可以将null作为"输出缓冲区" HashAlgorithm.TransformBlock()的参数?

时间:2014-04-09 06:52:14

标签: c# .net hashalgorithm

HashAlgorithm.TransformBlock()具有outputBuffer参数,该参数记录为用于计算哈希码的输入数组部分的副本。听起来像我的数据将被读取,用于更改哈希机制状态并复制到outputBuffer

我不需要复制。看起来我可以通过null代替它看起来有效。

如果我将null作为outputBuffer传递出来,我是否应该遇到任何问题?

1 个答案:

答案 0 :(得分:3)

是的,可以通过null。它甚至有这个参数的原因是因为它正在实现ICryptoTransform接口。构造CryptoStream时可以使用此接口,因为您可能希望构建一组转换。在这种情况下,HashAlgorithm根本不会更改数据,所以它最终被定义为只是将输入复制到输出。

ICryptoTransform的其他实现(例如,实际执行加密或解密的任何实现)当然也会写出非平凡的输出。

这意味着,在单次传递输入时,您可以计算哈希,而也执行加密 - 这就是此处支持此接口的原因。


current implementation只是在它完成工作后才有这个:

 if ((outputBuffer != null) && ((inputBuffer != outputBuffer) ||
      (inputOffset != outputOffset)))
      Buffer.BlockCopy(inputBuffer, inputOffset,
           outputBuffer, outputOffset, inputCount);