HashAlgorithm.TransformBlock()
具有outputBuffer
参数,该参数记录为用于计算哈希码的输入数组部分的副本。听起来像我的数据将被读取,用于更改哈希机制状态并复制到outputBuffer
。
我不需要复制。看起来我可以通过null
代替它看起来有效。
如果我将null
作为outputBuffer
传递出来,我是否应该遇到任何问题?
答案 0 :(得分:3)
是的,可以通过null
。它甚至有这个参数的原因是因为它正在实现ICryptoTransform
接口。构造CryptoStream
时可以使用此接口,因为您可能希望构建一组转换。在这种情况下,HashAlgorithm
根本不会更改数据,所以它最终被定义为只是将输入复制到输出。
ICryptoTransform
的其他实现(例如,实际执行加密或解密的任何实现)当然也会写出非平凡的输出。
这意味着,在单次传递输入时,您可以计算哈希,而也执行加密 - 这就是此处支持此接口的原因。
current implementation只是在它完成工作后才有这个:
if ((outputBuffer != null) && ((inputBuffer != outputBuffer) ||
(inputOffset != outputOffset)))
Buffer.BlockCopy(inputBuffer, inputOffset,
outputBuffer, outputOffset, inputCount);