2009-08-26 8 views
5

Wykonuję operację, w której otrzymuję niektóre bajty ze składnika, przetwarzam je, a następnie wysyłam do następnego komponentu. Muszę umieć obliczyć skrót wszystkich danych, które widziałem w danym czasie - i ze względu na rozmiar danych; Nie mogę zatrzymać wszystkiego w lokalnym buforze.Oblicz hash bez jednoczesnego posiadania całego bufora w pamięci

Jak można obliczyć (MD5) hash w tych okolicznościach?

Myślę, że powinienem być w stanie utrzymać wynik pośredni z hashem i dodawać więcej danych w trakcie pracy. Ale czy któraś z wbudowanych klas framework obsługuje to?

Odpowiedz

7

Po prostu chcesz użyć elementów klasy TransformBlock i TransformFinalBlock, które umożliwiają obliczanie wartości mieszania w porcjach.

MSDN ma dobry przykład, jak to zrobić.

+0

TransformBlock/TransformFinalBlock działa; ale jeśli porcje, które można przekazać do funkcji TransformFinalBlock, nie mają tego samego rozmiaru lub są większe niż wartość mieszania, należy użyć właściwości HashAlgorithm.Hash, aby uzyskać wartość skrótu po wywołaniu funkcji TransformFinalBlock. – driis

+0

Ach, cieszę się, że działa teraz dla ciebie. – Noldorin

0

To trochę zaskakujące, że nie wchodzi w skład zestawu.

Jeśli tworzysz MD5CryptoServiceProvider w zmiennej członkowskiej i wywołujesz ComputeHash() kilka razy, to nie działa jako dodatek?

+0

Nie, ComputeHash wielokrotnie, nie działa. Podejście TransformBlock/TransformFinalBlock wydaje się działać, obecnie testuję to. – driis

Powiązane problemy