CryptHashData相当于C#?

时间:2010-10-07 04:28:06

标签: c# cryptography

我正在尝试将一些现有的C ++代码翻译成C#。我有一些代码在同一个CryptHashData上调用HCRYPTHASH 3次。文档说“可以多次调用此函数和CryptHashSessionKey来计算长数据流或不连续数据流的散列。”

我希望在C#中实现这一目标。不幸的是,MD5.ComputeHash()似乎没有办法在现有的哈希上构建。

我错过了什么,是否有可以实现此目的的C#API?

2 个答案:

答案 0 :(得分:1)

实例化哈希类的实例并使用TransformBlockTransformFinalBlock

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;

答案 1 :(得分:0)

C#中的加密函数是有限的。最好在C#中导入CryptoAPI。

[DllImport("Advapi32.dll", SetLastError=true)]
public static extern Boolean CryptHashData (
    IntPtr hHash,
    Byte[] pbData,
    Int32 dwDataLen,
    Int32 dwFlags
);

请查看thisthis了解更多信息。