3

いくつかの暗号化操作 (主に整合性チェック ハッシュサム) を使用したいと思います。ただし、そのような形式の操作を行うドキュメントを見つけるのに問題があります。

bool read(std::istream &in) {
    hasher hv(in);
    // Do some operations on hv as if it was std::istream
    hash_type h = hv.finish ();
    hash_type h2 = read_hash(in);
    return h == h2;
}

PS。a) GPL-3 と互換性がある、b) GNU/Linux で動作する、という条件でライブラリが異なる場合があります。

PPS。私は crypto++ を主張しませんが、他の C++ ライブラリとの相互運用性のために IOStream のような動作をしたいと考えています。

4

2 に答える 2

6

crypto++ のFileSourceクラスはstd::istream&コンストラクタを取り込んでいるので、これで完了のようです。

FileSource (std::istream &in, bool pumpAll, 
    BufferedTransformation *attachment=NULL)

編集

あなたが尋ねているなら、これはcryptopp wikihow to use a hash function on istream in cryptoppから取られたサンプルで、で使用するために私が修正したものです:istream

#include "sha.h"
#include "files.h"

std::string digest;

CryptoPP::SHA256 hash;

CryptoPP::FileSource(in, true,   // true here means consume all input at once 
   new CryptoPP::HashFilter(hash,
         new CryptoPP::StringSink(digest)));

std::cout << digest << std::endl;

これにより、ストリームがineof まで読み取られ、フィルターを通過しhash、最終的に結果が文字列にエンフされdigestます。

于 2011-01-12T16:59:24.750 に答える
0

crypto++を使用して独自のistreamを実装します。

于 2011-01-12T13:49:30.650 に答える