2009-05-06 16 views
1

을 사용하여 Adler32를 얻는 방법 "문자열 파일 이름"이 주어지면 C++ Crypto ++ 라이브러리를 사용하여 Adler32 체크섬을 얻는 방법은 무엇입니까? 나는 Source와 Sink 시스템을 사용하는 것에 대해 약간 혼란 스럽다.파일 이름이 주어지면 Crypto ++

이하 MD5를 사용하는 코드의 골격을 가지고 있지만 Adler32 사용법에 대한 예제 또는 자습서를 찾을 수 없습니다.

string filename = "/tmp/data.txt" 
string file_adler32_digest; 
string file_md5_digest; 

MD5 hashMD5; 

FileSource fs(filename.c_str(), 
       true, 
       new HashFilter(hashMD5, 
       new HexEncoder(new StringSink(file_md5_digest)))); 

/* Confusion begins here */ 

//how do I do the adler32 ? 

/* Confusion ends here */ 

cout << file_adler32_digest << endl 
    << file_md5_digest << endl; 

모든,이 http://www.cryptopp.com/wiki/HashFilter을 따르는 경우에

답변

1

, 당신은 hashAdler32에 대한 hashMD5을 변경해야 (내가 원하는 Adler32 물건 제외) 암호화 ++ 및 file_md5_digest 좋은 샘플 및 샘플 코드 여기 http://www.cryptopp.com/wiki/Category:Sample file_adler32_digest이 file_adler32_digest

Adler32 hashAdler32; 

FileSource(filename.c_str(), 
      true, 
      new HashFilter(hashAdler32, 
      new HexEncoder(new StringSink(file_adler32_digest)))); 

원하는 해쉬를 포함한다.

+0

이것이 작동합니다. 이상하게 들리지만 이전에 시도해 보았습니다. 하지만 지금은 일합니다. 작동하게 만든 것은 당신의 대답 마술입니다. 감사! –

+0

그래, 이건 일종의 규칙이어야한다. 다른 사람에게 물어보기 전에는 작동하지 않을 것이다. 그런 다음 마술처럼 작동하기 시작할 것이다. 그쪽으로 여러 번 나에게 일어났습니다 :) – Ismael

0

.. 소스 및 싱크 시스템 사용에 대해 다소 혼란스러워합니다.

확인. 이 특별한 디자인은 유닉스 파이프 시스템에서 영감을 얻었습니다. Unix 파이프를 이해하고 그것을 통해 doata가 흐르면 Crypto++ Pipeline을 이해합니다.

cat somefile.bin | hexdump 

다음 암호화 ++ 프로그램이 될 것입니다 :

예를 들어, 다음 유닉스 명령

FileSource fs("somefile.bin", true /*pumpAll*/, new HexEncoder(new FileSink(cout))); 

내가 MD5를 수행하는 코드의 골격을 가지고 있지만, 코드가 필요합니다 ... Adler32 용 ...

이스마엘로

는 등의 간단한 방법을 설명했다 :

Adler32 adler32; 
string digest; 

FileSource fs(filename.c_str(), true /*pumpAll*/, 
       new HashFilter(adler32, 
        new HexEncoder(
         new StringSink(digest)))); 

을하지만, 여기에 통찰력이다 : 암호화 ++에서 데이터가 Sources에서 Sinks에 흐른다. 그 사이에 데이터를 변환하는 Filters이 발생합니다.

위의 필터는 HashFilterHexEncoder입니다. 모든 필터는 BufferedTransformation에서 상속되므로 모든 필터가 일관된 방식으로 함께 연결될 수 있습니다.

Adler32 그 자체는 필터가 아 닙니다. 그러나 HashTransformation에서 상속되며, 그게 HashFilter입니다. 따라서 어떤 HashFilter 기반 개체로 바꿀 수 있으며 모든 것이 올바르게 작동합니다.

HashTransformation Class ReferenceHashFilter 기반 개체의 목록을 찾을 수 있습니다. MD5, SHA 및 월풀과 같은 모든 해시, Adler32 및 CRC32가 포함됩니다.