2009-08-26 11 views
5

Sto facendo un'operazione in cui ricevo alcuni byte da un componente, eseguo alcune elaborazioni e quindi lo invio al componente successivo. Devo essere in grado di calcolare l'hash di tutti i dati che ho visto in un dato momento - e a causa della dimensione dei dati; Non riesco a tenere tutto in un buffer locale.Calcola l'hash senza avere l'intero buffer in memoria allo stesso tempo

Come si calcola l'hash (MD5) in queste circostanze?

Sto pensando che dovrei essere in grado di conservare un risultato intermedio dell'hash e aggiungere più dati mentre procedo. Ma nessuna delle classi di framework incorporate supporta questo?

risposta

7

È sufficiente utilizzare i membri TransformBlock e TransformFinalBlock della classe, che consentono di calcolare l'hash in blocchi.

MSDN ha un buon esempio di come farlo.

+0

TransformBlock/TransformFinalBlock funziona; ma se i blocchi che è possibile passare alla funzione TransformFinalBlock non ha la stessa dimensione o più grande dell'hash, è necessario utilizzare la proprietà HashAlgorithm.Hash per ottenere l'hash dopo aver chiamato TransformFinalBlock. – driis

+0

Ah, felice che funzioni per te ora. – Noldorin

0

È un po 'sorprendente che non entri nella confezione.

Se si crea MD5CryptoServiceProvider in una variabile membro e si richiama più volte ComputeHash(), non funziona come un'appendice?

+0

No, ComputeHash ripetutamente, non funziona. L'approccio TransformBlock/TransformFinalBlock sembra funzionare, al momento sto testandolo. – driis

Problemi correlati