当然。您可以重复调用TransformBlock
,然后在最后使用TransformFinalBlock
,然后使用Hash
获取最终的哈希值。因此,像:
using (var md5 = MD5.Create()) // Or MD5Cng.Create
using (var sha1 = SHA1.Create()) // Or SHA1Cng.Create
using (var input = File.OpenRead("file.data"))
{
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length()) > 0)
{
md5.TransformBlock(buffer, 0, bytesRead, buffer, 0);
sha1.TransformBlock(buffer, 0, bytesRead, buffer, 0);
}
// We have to call TransformFinalBlock, but we don't have any
// more data - just provide 0 bytes.
md5.TransformFinalBlock(buffer, 0, 0, buffer, 0);
sha1.TransformFinalBlock(buffer, 0, 0, buffer, 0);
byte[] md5Hash = md5.Hash;
byte[] sha1Hash = sha1.Hash;
}
的MD5Cng.Create
和SHA1Cng.Create
通话将创建一个围绕本地实现这可能是比MD5.Create
和SHA1.Create
返回实现更快的包装,但是这将是便携式的(例如用于PCLS)有点少。
将其逐段读取并将数据提供给您自己的摘要算法串联 – sehe 2013-02-15 22:41:42
检查:http://stackoverflow.com/questions/14610850/how-to-get-file-both-md5-and-sha1-checksum- at-the-same-time-when-upload-a-new-fi(java) – PunKeel 2013-02-15 22:42:33
http://stackoverflow.com/questions/7832440/is-hashalgorithm-computehash-stateful – 2013-02-15 22:43:18