2009-08-26 9 views
5

Je fais une opération où je reçois quelques octets d'un composant, fais un traitement, puis l'envoie au composant suivant. Je dois être capable de calculer le hash de toutes les données que j'ai vues à un moment donné - et à cause de la taille des données; Je ne peux pas tout garder dans un tampon local.Calculer le hachage sans avoir le tampon entier en mémoire à la fois

Comment calculeriez-vous le hachage (MD5) dans ces circonstances?

Je pense que je devrais être en mesure de conserver un résultat intermédiaire du hachage, et ajouter plus de données que je vais. Mais est-ce que l'une des classes de framework intégrées supporte cela?

Répondre

7

Vous souhaitez simplement utiliser les membres TransformBlock et TransformFinalBlock de la classe, qui vous permettent de calculer le hachage en morceaux.

MSDN a un bon exemple de la façon de procéder.

+0

TransformBlock/TransformFinalBlock fonctionne; mais si les blocs que vous pouvez passer à la fonction TransformFinalBlock n'ont pas la même taille, ou plus, que le hachage, vous devez utiliser la propriété HashAlgorithm.Hash pour obtenir le hachage après avoir appelé TransformFinalBlock. – driis

+0

Ah, content que ça fonctionne pour vous maintenant. – Noldorin

0

C'est un peu surprenant que ça ne vienne pas dans la boîte.

Si vous créez le MD5CryptoServiceProvider dans une variable membre et que vous appelez ComputeHash() à plusieurs reprises, cela ne fonctionne-t-il pas en tant qu'ajout?

+0

Non, ComputeHash à plusieurs reprises, ne fonctionne pas. L'approche TransformBlock/TransformFinalBlock semble fonctionner, je suis en train de le tester. – driis

Questions connexes