1

Qt 内の暗号化に Botan ライブラリを使用しています。あるファイルから別のファイルに暗号化および復号化できるように機能していますが、ファイルから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から読み書きでき、 /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 に答える