我读的图像中,对其进行加密,然后解密它。 我们的目标是最终被这个循环,并记录所花费的过程中完成的时间。 目前,我有什么它读取该文件,然后对其进行加密,加密,将创建一个基于恢复的数据的另一个文件。 我不需要再作文件与解密的图片。 以前我曾经使用过StringSource
和StringSink
,但这只是工作的文本文件。 我收到一些帮助, 如何将图像读取加密加密++字符串从使用开始FileSink
和FileSource
。
究竟是什么区别FileSink
, StringSink
, FileSource
和StringSource
?
此外,在下面的例子中,为什么密码需要设置的东西? 以前,当我刚用StringSource
,我的字符串密码未初始化,但现在,我使用FileSource
,它需要被初始化为它工作。
int main(int argc, char* argv[])
{
AutoSeededRandomPool prng_blowfish;
SecByteBlock key_blowfish(Blowfish::DEFAULT_KEYLENGTH);
prng_blowfish.GenerateBlock(key_blowfish, key_blowfish.size());
byte iv_blowfish[Blowfish::BLOCKSIZE];
prng_blowfish.GenerateBlock(iv_blowfish, sizeof(iv_blowfish));
string ifilename = "sample_files/1MB.jpg";
string cipher = "1MB.enc";
string rfilename = "r1MB.jpg";
try
{
EAX<Blowfish>::Encryption e_blowfish;
e_blowfish.SetKeyWithIV(key_blowfish, key_blowfish.size(), iv_blowfish, sizeof(iv_blowfish));
std::ifstream ifile(ifilename.c_str(), ios::binary);
std::ifstream::pos_type size = ifile.seekg(0, std::ios_base::end).tellg();
ifile.seekg(0, std::ios_base::beg);
FileSource fs1(ifilename.c_str(), true, new AuthenticatedEncryptionFilter(e_blowfish, new FileSink(cipher.c_str())));
EAX<Blowfish>::Decryption d_blowfish;
d_blowfish.SetKeyWithIV(key_blowfish, key_blowfish.size(), iv_blowfish, sizeof(iv_blowfish));
FileSource fs2(cipher.c_str(), true, new AuthenticatedDecryptionFilter(d_blowfish, new FileSink(rfilename.c_str()), AuthenticatedDecryptionFilter::THROW_EXCEPTION));
}
catch (const Exception& ex)
{
cerr << ex.what() << endl;
}
return 0;
}