2009-08-26 9 views
5

que estoy haciendo una operación en la que recibo algunos bytes desde un componente, hacer algo de procesamiento y, a continuación, enviarlo a la siguiente componente. Necesito poder calcular el hash de todos los datos que he visto en un momento dado, y debido al tamaño de los datos; No puedo mantener todo en un buffer local.de hash sin tener toda la memoria intermedia en la memoria a la vez

¿Cómo calcular el hash (MD5) en estas circunstancias?

Estoy pensando que yo debería ser capaz de aferrarse a un resultado intermedio del hash, y añadir más datos a medida que avanzo. Pero, ¿alguna de las clases integradas de frameworks lo soportan?

Respuesta

7

Simplemente desea utilizar los miembros TransformBlock y TransformFinalBlock de la clase, que le permiten calcular el hash en trozos.

MSDN tiene un buen ejemplo de cómo hacer esto.

+0

TransformBlock/TransformFinalBlock funciona; pero si los fragmentos que puede pasar a la función TransformFinalBlock no son del mismo tamaño o más grandes que el hash, debe usar la propiedad HashAlgorithm.Hash para obtener el hash después de llamar a TransformFinalBlock. – driis

+0

Ah, me alegro de que esté trabajando para ti ahora. – Noldorin

0

Es un poco sorprendente que no viene en la caja.

Si crea el MD5CryptoServiceProvider en una variable miembro, y llamar ComputeHash() varias veces, qué no funciona como una añada?

+0

No, ComputeHash repetidamente, no funciona. El enfoque TransformBlock/TransformFinalBlock parece estar funcionando, actualmente lo estoy probando. – driis

Cuestiones relacionadas