我现在想使用 JDK 6 api 加密和解密 XML 文档。我不想使用任何第三方 api,例如 apache Santuario。整个意图是,如果一个 XML 文件被加密并交付给一个用 C#.Net、Python 或任何其他语言开发的系统,则可以解密加密的 xml 文档。如果可能,可以与各方共享公钥。目的不是加密整个文件。我知道,这很容易做到。我想清楚地加密 XML 文档。它应该看起来像一个 xml 文件,但是应该像 Apache Santuario 一样对正文内容进行加密。
问问题
390 次
1 回答
-1
第一步是确定所有三个系统都支持的加密方案。我认为 AES-256 是一个很好的方案,但 Python 不直接支持它(它需要PyCrypto 模块)。
您不应该尝试实施自己的方案;密码学很难,甚至更难做到正确。举个例子:世界上的密码学专家花了几年时间来构建 AES。所以除非你比全世界都聪明,否则你的算法会有缺陷。
这也意味着当所有三个运行时都不支持好的方案时,您可能不得不求助于外部库,因为编写一个好的密码算法也非常困难。
确定模式后,对一些测试数据进行编码,以确保每个系统都能正确编码和解码。这些单元测试将使以后的调试变得更加容易,因为您可以确定问题不在您无法读取的二进制数据中。
最后一步是让一切都使用 XML。这相对简单:编写一个过滤器,保持元素完整,并用加密的代码块替换所有文本节点。使用 Base64 将二进制加密数据转换为 XML 文本(确保您仍然正确地转义文本)。
当最有价值的信息在文本块中时,这非常有效。但是一些 XML 文档还在属性中保留了重要数据。要解决此问题,请将所有此类属性替换为新<attr>
元素。原来的:
<a foo="Important text">...
加密:
<a><attr name="foo">...encrypted value of foo....</attr>...
这样,您可以在两种形式之间进行转换而不会丢失数据。
于 2013-09-10T15:15:49.067 回答