在C ++中使用加密流

时间:2011-01-12 13:30:04

标签: c++ cryptography crypto++

我想使用一些加密操作(主要是整合检查哈希)。但是,我在找到执行此类操作的文档方面存在问题:

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的行为。

2 个答案:

答案 0 :(得分:6)

crypto ++的FileSource类在构造函数中使用std::istream&,所以看起来你已经完成了。

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

修改

如果您问how to use a hash function on istream in cryptopp,这里的摘录自cryptopp wiki,由我修改后用于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;

这将读取流in直到eof,将其传递到hash过滤器,最后结果将在digest字符串中显示。

答案 1 :(得分:0)

Implement your own istream使用crypto ++。