もちろん。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
によって返される実装よりも高速である可能性が高いネイティブ実装の周りにラッパーを作成しますが、移植性は少し低くなります (PCL など)。MD5.Create
SHA1.Create