C++ C++;:如何加密XML配置文件

C++ C++;:如何加密XML配置文件,c++,xml,encryption,configuration,C++,Xml,Encryption,Configuration,我有一个使用xml配置的专有应用程序。目前,我使用boost::property_树来读取xml文件 我希望将可执行文件和xml文件部署在一个更公开的系统上,并希望避免任何人(包括该系统的管理员)读取xml 理想情况下,我希望在我的系统上维护明文xml,以便可以轻松地手动修改它。然后我会对文件调用一些encrypt命令,将其部署到更公开的机器上,让可执行文件动态解密。我将使用相同的键,并将其硬编码到可执行文件的源代码中 这是否合理的做法?实现这一点最简单的方法是什么?有更好的方法吗?如果代码在客

我有一个使用xml配置的专有应用程序。目前,我使用boost::property_树来读取xml文件

我希望将可执行文件和xml文件部署在一个更公开的系统上,并希望避免任何人(包括该系统的管理员)读取xml

理想情况下,我希望在我的系统上维护明文xml,以便可以轻松地手动修改它。然后我会对文件调用一些encrypt命令,将其部署到更公开的机器上,让可执行文件动态解密。我将使用相同的键,并将其硬编码到可执行文件的源代码中


这是否合理的做法?实现这一点最简单的方法是什么?有更好的方法吗?

如果代码在客户机上运行,那么原则上您永远不能阻止数据被知道,因为它必须在客户机上。您可以尝试混淆,但最终客户机必须能够读取数据,因此它必须知道数据

如果只是在程序中嵌入一个加密密钥,客户端只需扫描文件并提取密钥。如果你再努力一点,你可以制作Skype,但即便如此,它也已经被解构了


这完全取决于您保护数据需求的严重性。如果它是绝对的,那么你就不能这么做,但是如果你只是想把临时访客拒之门外,你可以试着让它更难一点。。。如果你是认真的,请告诉我们一些细节。

如果你的目标是防止有人随意检查,那么这是一个合理的方法

如果您必须确保(出于某种奇怪的原因)配置无法读取,那么这是一件愚蠢的差事,因为程序可以读取它,因此决心这样做的用户也可以这样做。可以通过反汇编程序,也可以通过从调试器进行内存转储。话虽如此,一个简单、轻量级的加密就足够了,因为即使是最难的加密也会以同样的方式被破坏


你也可以考虑是否使用一个明确的人类可读格式,比如XML,如果你不想让人读到它,那就很合适了。

< P>因为你已经使用了<代码> Boost ,你总是可以。如果使用二进制存档,则该文件基本上无法读取。我想我的后续问题是:您是否也希望它是安全的?或者只是不可读?

我有一个非常类似的案例。我使用压缩算法来存储文件“加密”。ZLIB可用于C++。您可以轻松地从命令行和代码对文件进行加密和解密。要添加更多的“安全性”,您可以使用密码对压缩文件进行异或


这是一种既易于实现又易于使用的方法。当然,如果我的客户是黑客,或者有阅读XML的经济动机,我就不会使用这种方法。

那里有什么需要保护的吗?或者你只是不想让人们在文件中胡闹并要求支持?如果是后一种情况,那么二进制序列化呢?这不是一件建设性的事情。一个有足够决心的系统管理员可以并且将对您的应用程序进行反向工程,找到密钥并解密配置文件。需要修改配置的不太坚定的人只会放弃你的应用程序。因此,你所做的所有这些伎俩,最终都是在抢占你自己的市场份额。只要你意识到,由于应用程序需要持有解密密钥才能读取配置文件,加密充其量只是一种阻止偶然窥探的手段,而不是一种合法的安全形式。@Zack:使用公钥系统,管理员可以解密文件,但不能更改参数(不能加密修改后的文件)。从这个意义上说,效果将更接近于“签名”文件,并结合一种简单的隐蔽性安全形式。这只会使它更难一步(现在管理员必须修补二进制文件以接受不同的签名密钥)。事实证明,这对于我的需要来说是最简单、更快的。为了跨系统的可移植性,我使用了文本序列化而不是二进制,这意味着数字和文本仍然可读。