1

我正在使用 Botan 库在 Qt 中进行加密。我让它工作到可以从一个文件加密和解密到另一个文件的位置,但我正在尝试将其更改为从文件加密到 QDomDocument(加密文件将只是一个 XML 文件),然后从 QDomDocument 解密到一个文件。

到目前为止,这就是我实际加密的内容(filePlainText/fileEnc 只是 txt 文件路径)。

std::ifstream in(filePlainText.c_str(),std::ios::binary);
std::ofstream out(fileEnc.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();

DataSink_Stream 接受 ofsteam 或 ostream。所以我想在从文件解密到变量时我需要使用 ostream。但是如何将 ostream 的内容存储到可以输入 QDomDocument 的内容中?

然后为了加密回文件,使用 istream 到 ofstream 中,但是我怎样才能将 QDomDocument 内容输入到 istream 中?

4

1 回答 1

2

QDomDocument可以读取和写入 a并且您可以使用/QByteArray读取 / 写入 std::string 。std::ostringstreamstd::istringstream

所以如果你把这些结合起来,你会得到类似的东西:

// before the encoding
const QByteArray & buffer = document.toByteArray(-1);
std::istringstream in(std::string(buffer.data(), buffer.size()));
... // encoding

对于解码部分:

// before the decoding
std::ostringstream out;
... // decoding
// after the decoding
const std::string & buffer = out.str();
document.setContent(QByteArray(buffer.c_str(), buffer.size()));
于 2012-03-11T22:35:12.497 回答