2012-03-11 16 views
1

Qt内の暗号化にBotanライブラリを使用しています。私は1つのファイルから別のファイルに暗号化と復号化を行うことができますが、ファイルからQDomDocument(暗号化されたファイルはXMLファイルになります)を暗号化してQDomDocumentから復号化しようとしていますファイルに。出力Botan暗号化の結果が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を使用しますが、QDomDocumentのコンテンツをistreamにどのようにフィードできますか?

答えて

2

QDomDocumentQByteArrayから読み書きでき、std::ostringstream/std::istringstreamとstd :: stringから読み書きできます。

// 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())); 
+0

パーフェクトあなたはこれらを組み合わせると

だから、あなたのようなものを持っているでしょう! QByteArrayからQDom/streamへの変換は、私が見逃していたものです。ありがとう! – giraffee

関連する問題