Вывод результатов шифрования Botan в QDomDocument и наоборот - PullRequest
1 голос
/ 12 марта 2012

Я использую библиотеку 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?

1 Ответ

2 голосов
/ 12 марта 2012

QDomDocument может считываться и записываться в QByteArray, а вы можете читать / записывать в std :: string с помощью 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()));
...