2010-10-07 6 views
2

J'essaye de traduire du code C++ existant en C#. J'ai un code qui appelle CryptHashData 3 fois sur le même HCRYPTHASH. La documentation indique "Cette fonction et CryptHashSessionKey peut être appelée plusieurs fois pour calculer le hachage de flux de données longs ou discontinus."CryptHashData équivalent pour C#?

Ce que je veux atteindre en C#. Malheureusement, MD5.ComputeHash() ne semble pas avoir un moyen de construire sur le hachage existant. Est-ce que je manque quelque chose, y a-t-il une API C# qui permettrait d'atteindre cet objectif?

Répondre

1

instancier une instance de la classe de hachage et utiliser TransformBlock et 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; 
+0

Merci beaucoup! – Stefan

0

Les fonctions de cryptographie en C# sont limitées. Il est préférable d'importer CryptoAPI en C#.

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

Regardez this et this plus.

+1

De quelle façon sont les limitées? –