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

探している 2 つのメソッドは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 に答える