如何在Qt中使用botan加密大文件时获得加密/解密进度

时间:2012-12-08 13:28:35

标签: c++ qt botan

我有以下代码用Qt中的botan加密和解密文件。 加密大文件时,它会花费大量时间,并且我希望在加密/解密大文件时获取已处理字节的数量。有可能吗?

   void AES::Encrypt(SymmetricKey key, InitializationVector iv, string inFilename,  string outFilename)
{
    std::ifstream in(inFilename.c_str(),std::ios::binary);
    std::ofstream out(outFilename.c_str(),std::ios::binary);

    Pipe pipe(get_cipher("AES-256/CBC", key, iv,ENCRYPTION),new DataSink_Stream(out));
    pipe.start_msg();
    in >> pipe;
    pipe.end_msg();

    out.flush();
    out.close();
    in.close();

    qDebug() << "Encrypted!";
}

void AES::Decrypt(SymmetricKey key, InitializationVector iv, string inFilename,  string outFilename)
{
    std::ifstream in(inFilename.c_str(),std::ios::binary);
    std::ofstream out(outFilename.c_str(),std::ios::binary);

    Pipe pipe(get_cipher("AES-256/CBC", key, iv,DECRYPTION),new DataSink_Stream(out));
    pipe.start_msg();
    in >> pipe;
    pipe.end_msg();

    out.flush();
    out.close();
    in.close();

    qDebug() << "Decrypted!";
}

1 个答案:

答案 0 :(得分:0)

如果您查看有关Pipe/Filter Mechanisms的Botan文档,则会讨论有关处理大型文件和限制使用内存的问题。在该部分的末尾,是一个代码片段,显示了使用有界缓冲区处理大型文件。通过在那里添加一些代码,我认为你将能够使加密操作不会耗尽内存,并且能够从该循环中激活Qt进度信号。