2009-05-06 5 views
1

「文字列ファイル名」を指定すると、C++ Crypto ++ライブラリを使用してAdler32チェックサムを取得できます。ソースとシンクのシステムを使うのはちょっと混乱しています。ファイル名を指定すると、Crypto ++を使用してAdler32を入手するにはどうすればよいですか?

以下私はMD5を行うコードのスケルトンを持っていますが、Adler32の使用法に関するサンプルやチュートリアルは見つかりません。 (私はしたい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/Category:Sample ++

答えて

1

あなたはこのhttp://www.cryptopp.com/wiki/HashFilterに従うならば、あなたはhashAdler32ためhashMD5を変更する必要があり、かつfile_md5_digest 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

.. Source and Sinkシステムを使用するのはちょっと混乱します。

OK。その特別なデザインは、Unixパイプシステムに触発されています。あなたがUnixパイプを理解し、それを通してdoataがどのように流れているのかを理解すれば、Crypto++ Pipelineを理解できます。

たとえば、次のUnixコマンド:

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)))); 

しかし、ここで洞察力です:暗号++では、データはSinksSourcesから流れ。その間に、データを変換するFiltersが発生します。

以上、HashFilterHexEncoderという2つのフィルタがあります。すべてのフィルタはBufferedTransformationから継承されているため、すべて一貫して連鎖させることができます。

Adler32それ自身はフィルタではありません。しかし、それはHashTransformationから継承し、それはHashFilterが使用するものです。だから、あなたはHashFilterベースのオブジェクトに入れ替えることができ、物事はうまくいくでしょう。

HashTransformation Class ReferenceにはHashFilterオブジェクトのリストがあります。すべてのハッシュ(MD5、SHA、Whirlpoolなど)、Adler32、CRC32などがあります。

関連する問題