计算部分流的MD5哈希值

Sat*_*ite 7 .net iostream stream

我有一个以自定义文件格式存储的大型数据集(~1GB),其后16个字节是文件所有先前字节的MD5哈希值.

我想使用HashAlgorithm.ComputeHash(Stream)对嵌入式MD5验证此文件的MD5,但是这将计算整个文件的哈希值,包括最后16字节中的哈希值,这显然不会起作用.

如何计算流的PART的MD5哈希值?我知道我可以将流读入数组并将其传递给HashAlgorithm.ComputeHash(字节),但是在内存中复制这1GB数据的开销是令人望而却步的.

Euq*_*qil 5

这里开始,您还可以获得其他方式.

创建一个部分文件流类,读取您想要的大小并对其进行哈希处理.

 class PartialFileStream : FileStream
{
    public PartialFileStream(string path, FileMode mode, long startPosition, long endPosition): base(path, mode)
{
  base.Seek(startPosition, SeekOrigin.Begin);
  ReadTillPosition = endPosition;
}

public long ReadTillPosition { get; set; }

public override int Read(byte[] array, int offset, int count)
{
 if (base.Position >= this.ReadTillPosition)
   return 0;

 if (base.Position + count > this.ReadTillPosition)
   count = (int)(this.ReadTillPosition - base.Position);

 return base.Read(array, offset, count);
  }
}
Run Code Online (Sandbox Code Playgroud)