我想用以下几个步骤计算sha1哈希
TransformBlock()
/
TransformFinalBlock()
以下内容:
byte[] block1 = Encoding.ASCII.GetBytes("This");
byte[] block2 = Encoding.ASCII.GetBytes("is");
byte[] block3 = Encoding.ASCII.GetBytes("Sparta");
SHA1 sha = new SHA1Managed();
sha.TransformBlock(block1, 0, block1.Length, block1, 0);
sha.TransformBlock(block2, 0, block2.Length, block2, 0);
sha.TransformFinalBlock(block3, 0, block3.Length);
byte[] result = sha.Hash;
我知道还有其他方法可以计算sha1(例如:
HashAlgorithm.ComputeHash()
或
CryptoStream
)。上面是更复杂代码的简化版本。
我完全不清楚的是
输出缓冲区数组
(TransformBlock方法的第四个参数)
以下内容:
int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount,
byte[] outputBuffer, int outputOffset);
这个
MSDN page
说:
计算输入字节的指定区域的哈希值
数组和
将输入字节数组的指定区域复制到
输出字节数组的指定区域
如果我不需要那个数组副本呢?我应该通过吗
null
是吗?(为了避免每次都复制输入数组?)
这是一种典型的用法吗?
类似地,TransformFinalBlock()似乎也将输入数组复制到输出数组。afaikm这是方法返回的结果:
byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount);