1

「文字列ファイル名」が与えられた場合、C++ Crypto++ ライブラリを使用して Adler32 チェックサムを取得するにはどうすればよいですか。Source and Sink システムの使用について少し混乱しています。

以下に、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/Category:Crypto++のサンプル (必要な Adler32 のものを除く)

4

2 に答える 2

1

このhttp://www.cryptopp.com/wiki/HashFilterに従う場合、hashAdler32 の hashMD5 と file_adler32_digest の file_md5_digest を変更する必要があります。

Adler32 hashAdler32;

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

この後file_adler32_digestに、目的のハッシュが含まれている必要があります。

于 2009-05-06T06:16:41.553 に答える
0

.. Source と Sink システムの使用について少し混乱しています。

わかった。その特定のデザインは、Unix のパイプ システムにインスパイアされています。Unix パイプと doata がパイプを通過する方法を理解していれば、Crypto++ Pipelineも理解できます。

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

cat somefile.bin | hexdump

次の Crypto++ プログラムになります。

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

MD5 を実行するコードのスケルトンはありますが、Adler32 用のコードが必要です ...

Ismael が示したように、次のように簡単です。

Adler32 adler32;
string digest;

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

しかし、ここに洞察があります: Crypto++ では、データはSourcesからSinksに流れます。その間に、データを変換するフィルターに遭遇します。

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

Adler32それ自体はフィルターではありません。しかし、それは から継承してHashTransformationおり、それがHashFilterが使用するものです。したがって、任意のHashFilterベースのオブジェクトを交換することができ、物事はうまく機能します。

HashTransformation Class ReferenceでHashFilterベースのオブジェクトのリストを見つけることができます。これらには、すべてのハッシュ (MD5、SHA、Whirlpool など)、Adler32、CRC32 が含まれます。

于 2015-04-15T20:50:01.510 に答える