【问题标题】:How to encrypt xml file by boost property_tree?如何通过 boost property_tree 加密 xml 文件?
【发布时间】:2014-09-11 10:37:09
【问题描述】:

现在我想通过Boost ptree生成一个加密的XML文件。

    using boost::property_tree::ptree;
    ptree   pt;

    pt.add("License.Unalterable.Signed.Guid", m_Guid);
    pt.add("License.Unalterable.Signed.CustomerId", m_CustomerId);
    pt.add("License.Unalterable.Signed.Name", m_Name);
    pt.add("License.Unalterable.Signed.Version", m_version);

    write_xml(licenseFileName, pt);

我想在调用write_xml() 之前加密整个xml 文件。通过阅读write_xml的代码,我知道xml节点是从ptree中一一读取的,然后立即一一写入fstream有没有办法在将整个xml数据流写入文件之前获取它?这样我就可以加密整个数据流,然后将它们写入文件。

目前,我的解决方案是在write_xml创建后重新读取这个xml文件,然后将xml内容加密后再写回来。

【问题讨论】:

  • 所以使用备用write_xml将其写入std::ostringstream,然后加密结果并将那个转储到磁盘。
  • 你的意思是把pt写成ostringstream
  • 是的,然后从您的 ossencrypt 位的.str() 方法中提取结果,并将其转储到您的文件中。差不多就是这样。我对数据复制并不感到兴奋,我想看看是否有办法让你使用来自 boost 的进程间向量流或缓冲流,但是我不认为有(或者很多人比我向您展示的方法更精明)。不过,我知道std::ostringstream 会起作用。
  • 我想加密整个元素如<Guid>123</Guid>,不知道如何从ptree获取整个xml元素树。
  • 这就是write_xml 的意义所在。它会将整个 ptree 作为 XML 转储到目标流中。在那里,您可以一次性加密整个文件并将其发送到您的实际目标(磁盘文件)。如果可以更详细地解释这一点,我看不出如何。对不起。

标签: c++ xml encryption boost


【解决方案1】:

评论者建议这样做:

std::ostringstream oss;
write_xml(oss, pt);

// now you can encrypt
std::string plain_text = oss.str();

现在您可以加密明文并将密文写入文件

【讨论】:

  • +1 是的,这正是我想说的(应该只是写代码,会少很多击键)。
  • @WhozCraig 我本来打算使用自定义 streambuf 的方法,但我想得更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 2023-03-07
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多