2009-08-26 3 views
5

구성 요소에서 일부 바이트를 받고 처리를 수행 한 후 다음 구성 요소로 보내는 작업을 수행하고 있습니다. 주어진 시간에 본 모든 데이터의 해시를 계산할 수 있어야합니다. 데이터 크기 때문입니다. 모든 것을 로컬 버퍼에 보관할 수는 없습니다.전체 버퍼를 한 번에 메모리에 저장하지 않고 해시 계산

이러한 상황에서 어떻게 (MD5) 해시를 계산할 수 있습니까?

나는 해시의 중간 결과를 유지하고 내가가는대로 더 많은 데이터를 추가 할 수 있어야한다고 생각하고 있습니다. 그러나 기본 제공 프레임 워크 클래스 중 하나가이를 지원합니까?

답변

7

청크로 해시를 계산할 수있는 클래스의 구성원 인 TransformBlockTransformFinalBlock 만 사용하면됩니다.

MSDN에는이를 수행하는 좋은 예가 있습니다.

+0

TransformBlock/TransformFinalBlock 작동; 그러나 TransformFinalBlock 함수에 전달할 수있는 청크가 해시 크기와 같거나 크지 않은 경우 HashAlgorithm.Hash 속성을 사용하여 TransformFinalBlock을 호출 한 후 해시를 가져와야합니다. – driis

+0

아, 이제 다행입니다. – Noldorin

0

상자에 들어오지 않는 것은 놀랍습니다.

멤버 변수에 MD5CryptoServiceProvider를 만들고 ComputeHash()를 반복적으로 호출하면 추가로 작동하지 않습니까?

+0

아니요, ComputeHash가 반복적으로 작동하지 않습니다. TransformBlock/TransformFinalBlock 방식이 작동하는 것 같습니다. 현재 테스트 중입니다. – driis

관련 문제