I am trying to translate some existing C++ code开发者_如何转开发 to C#. I have some code which calls CryptHashData
3 times on the same HCRYPTHASH
. The documentation says "This function and CryptHashSessionKey
can be called multiple times to compute the hash of long or discontinuous data streams."
Which is what I want to achieve in C#. Unfortunately, MD5.ComputeHash()
doesn't appear to have a way to build on the existing hash.
Am I missing something, is there a C# API that would achieve this?
Instantiate an instance of the hash class and use TransformBlock
and TransformFinalBlock
:
byte[] part1 = //...
byte[] part2 = //...
byte[] part3 = //...
var hash = new MD5CryptoServiceProvider();
hash.TransformBlock(part1, 0, part1.Length, null, 0);
hash.TransformBlock(part2, 0, part2.Length, null, 0);
hash.TransformFinalBlock(part3, 0, part3.Length);
byte[] res = hash.Hash;
The cryptography functions in C# are limited. It's better to import CryptoAPI in C#.
[DllImport("Advapi32.dll", SetLastError=true)]
public static extern Boolean CryptHashData (
IntPtr hHash,
Byte[] pbData,
Int32 dwDataLen,
Int32 dwFlags
);
Look at this and this for more.
精彩评论