2012-03-11 3 views
1

Я использую библиотеку Botan для шифрования в Qt. Я работаю над тем, где я могу шифровать и расшифровывать файлы из одного файла в другой, но я пытаюсь изменить его для шифрования из файла в QDomDocument (зашифрованный файл будет просто XML-файлом) и расшифровать его из QDomDocument в файл.Вывод результатов ботанического шифрования в 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 принимает приставку или ostream. Поэтому я считаю, что мне нужно использовать ostream при расшифровке из файла в переменную. Но как я могу хранить содержимое ostream в чем-то, что могу подавать в QDomDocument?

Затем, чтобы зашифровать обратно в файл, используйте istream в поток, но как я могу передать содержимое QDomDocument в istream?

ответ

2

QDomDocument может быть прочитан и записан в QByteArray, и вы можете читать/писать в станде :: строку с std::ostringstream/std::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())); 
+0

идеальный! Это то, чего мне не хватало - конвертирования в QByteArray и из QQom/потока. Благодаря! – giraffee

 Смежные вопросы

  • Нет связанных вопросов^_^