ファイル名を指定して、Crypto ++を使用してAdler32を取得するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/827634

質問

" string filename"を指定すると、C ++ Crypto ++ライブラリを使用してAdler32チェックサムを取得できます。 Sourceおよび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のものを除く)

役に立ちましたか?

解決

この 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 に目的のハッシュを含める必要があります。

他のヒント

  

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

OK。その特定の設計は、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 ++では、データはソースからシンク。その間に、データを変換するフィルターに遭遇します。

上記には、2つのフィルターがあります: HashFilter HexEncoder 。すべてのフィルターは BufferedTransformation を継承するため、すべてをチェーン化できます。一貫した方法で一緒に。

Adler32 自体はフィルターではありません。しかし、 HashTransformation を継承し、それが HashFilter が使用します。そのため、任意の HashFilter ベースのオブジェクトにスワップでき、物事は機能します。

HashFilter ベースのオブジェクトのリストは、 HashTransformationクラスリファレンス。それらにはすべてのハッシュ(MD5、SHA、ワールプールなど)、Adler32、CRC32が含まれます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top