Encryption 比较加密前和解密后数据的好方法是什么

Encryption 比较加密前和解密后数据的好方法是什么,encryption,file-io,compare,crypto++,Encryption,File Io,Compare,Crypto++,我正在运行许多来自Crypto++的算法。我正在加密,然后像这样解密: int main(int argc, char* argv[]) { AutoSeededRandomPool prng_blowfish; SecByteBlock key_blowfish(Blowfish::DEFAULT_KEYLENGTH); prng_blowfish.GenerateBlock( key_blowfish, key_blowfish.size() ); byt

我正在运行许多来自Crypto++的算法。我正在加密,然后像这样解密:

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 StringSink( rfilename ), AuthenticatedDecryptionFilter::THROW_EXCEPTION ) ); 

    } catch (const Exception& ex) {
        cerr << ex.what() << endl;
    }

   return 0;
}

我需要确保一切正常。我想将加密前读入的文件与解密后读入的文件进行比较,这样我就知道一切正常。有人能举例说明我是如何做到这一点的吗?

不幸的是,仅通过查看输出无法检查加密例程是否正确执行。不过,您可以也应该检查的陷阱很少:

加密一个全零文件,看看是否有任何可识别的模式。欧洲央行在那里展示了重复的区块。 对同一文件加密两次。密文不应具有任何可见的相似性。如果它们相同,那么您可能多次使用相同的IV或nonce。 基本上与上述问题相同:没有任何外部知识包计数器等。由于必须同时传输IV或nonce,密文将始终比明文长。 如果您在浏览代码后使用的是经过身份验证的加密,我相信您确实更改了一个字节,并验证它是否确实会导致错误消息。
但正如我上面所说的,这些只是消极的标准。许多其他错误不会以这种方式显示出来。例如,如果您使用当前时间作为密钥的熵源,您将看到与适当熵完全相同的行为。

最简单的方法是在前后计算哈希。md5,sha,类似的。可能是@j.atec-。。。有人能举个例子吗你必须做你自己的工作。我在Crypo++问题上的额外帮助开创了一个糟糕的先例,因为这不是一个简单的库。但是其他人可能不会这么容易适应,尤其是在C++基础问题上。我相信J.ATEC希望确保文件的正确往返:我想把解密后的文件从加密后的文件比较到文件。在文件加密之前,我完全误解了他的阅读问题@是的,j.atec有一些有趣的要求。我认为这是源于他的基准测试。