2

可以说我正在做类似的事情:

FileStream fs = File.OpenRead("xxx.xxx");
byte[] buffer = new byte[1024];
int count;
long pos = 0, length = fs.Length;

MD5 md5 = MD5.Create();

while(pos < length && (count = fs.Read(buffer, 0, 1024)) > 0)
{
  doWork(buffer, count);
  md5.AddBlock(buffer, count); // <- Is this possible?
}

byte[] checksum = md5.GetChecksum(); // <- Possible?

我希望能够在通过流时计算 MD5 校验和……这可能吗?

4

1 回答 1

1

您正在寻找的两种方法是TransformBlockTransformFinalBlock。他们会做你正在寻找的东西。

FileStream fs = File.OpenRead("xxx.xxx");
byte[] buffer = new byte[1024];
int count;
long pos = 0, length = fs.Length;

MD5 md5 = MD5.Create();

while(pos < length && (count = fs.Read(buffer, 0, 1024)) > 0)
{
  pos += count;
  doWork(buffer, count);
  int md5Offset = 0

  //The while loop may be unnessasary, I don't know if it will ever process less than the length you pass in. The MSDN is unclear about that.
  while(md5Offset < count)
      md5Offset += md5.TransformBlock(buffer, md5Offset , count - md5Offset, buffer, md5Offset);
}

md5.TransformFinalBlock(buffer, 0, 0);
byte[] checksum = md5.Hash;
于 2012-12-11T21:57:00.007 回答