나는 다음과 같은 사용 사례가 : 파일에서.NET HashAlgorithm (반복되는 증분 해시 결과의 경우)을 복사 할 수 있습니까?
- 읽기 N 바이트 이 n 바이트를위한
- 계산 (MD5) 해시 파일
- 계산 (MD5) 해시에서
- 읽기 다음 m 바이트 최대 n + m 바이트까지의 파일에 대해
파일을 점진적으로 해싱하면 just call TransformBlock
and TransformFinalBlock
이 문제가되지 않습니다.
문제
는 나는 그것의 시작 바이트를 공유하는 데이터의 여러 해시 필요하지만, 내가TransformFinalBlock
전화 후 나는 같은 객체와 해시 계속할 수있는 최초의
n
바이트
Hash
를 읽고 새로운 하나를 필요로한다는 것이다. (반환을
hash.copy()
사본을 :
문제 검색, 둘 다 Python뿐만 아니라 OpenSSL 정확히 이러한 목적을 위해 해싱 개체를 복사 할 수있는 옵션을 가지고 보았다 "복제"). 이 은 공통 초기 하위 문자열을 공유하는 문자열의 다이제스트를 효율적으로 계산하는 데 사용할 수 있습니다.
EVP_MD_CTX_copy_ex()는 아웃 메시지에 상태에서 소화 복사하는데 사용될 수있다. 대용량의 데이터가 마지막 바이트 인에서만 차이가있는 으로 해시 될 때 유용합니다. 이 함수를 호출하기 전에 out을 으로 초기화해야합니다. 해시 계속 나중에하고 -
나는, 나는 그것의 TransformFinalBlock
메소드를 호출 전에 나를 Clone()
==는 객체 를 복사 효율적으로 할 수 있도록 할 주식의 C# HashAlgorithm withing에 아무것도 찾을 수 있습니다으로 검색 복제본과 함께 나머지 데이터.
클로닝 (*)을 지원하기 위해 쉽게 조정할 수 있지만 코드베이스에 그러한 것을 도입하는 대신 무엇을 사용하는 것이 좋습니다.
이러한 알고리즘은이 모든 상태가의 한 형태이기 때문에 (*) 사실, 지금까지의 내가 이해, 어떤 해싱 알고리즘 (암호화/암호 해독 반대) 나는 확인할 방해 한 하찮게 복사 가능한 것입니다 요람.
그래서 여기에 뭔가가 없거나 실제로 표준 C#/.NET 인터페이스가 해시 객체를 복사하는 방법을 제공하지 않습니다.
또 다른 데이터 포인트는 :
CryptDuplicateHash 기능을 만드는 데 사용할 수 있습니다 :
crypto services에 대한 마이크로 소프트의 자신의 네이티브 API 함수
CryptDuplicateHash
, 국가의 문서, 견적을했다 동일한 내용으로 시작하는 두 개의 서로 다른 내용으로 된 의 해시를 분리하십시오.
Windows XP 이후. : - |
참고 wrt. MD5 : 유즈 케이스는 암호 학적으로 민감하지 않습니다. 신뢰할 수있는 파일 체크섬.
일부 클래스는 쉽게 복제 할 수 없지만 일부 리소스는 원시 리소스를 사용하거나 핸들이있는 특수 하드웨어를 호출 할 수 있습니다. 이러한 유형의 클래스는 복제하기가 쉽지 않습니다. –
@ 스콧 - 고마워. 네, 수업이있을 것 같아요. 여전히 MD5와 같은 것은 * 복제가 가능해야합니다. 그럼 방법이 없나요? –
얕은 복사본을 원한다면 모든 것을 반복하고 직접 만들어야하는 것처럼 보입니다. –