【问题标题】:how to create and use encrypted Property files in Java?如何在 Java 中创建和使用加密的属性文件?
【发布时间】:2011-07-02 00:48:56
【问题描述】:

我想创建一个加密的属性文件来存储与许可证相关的信息和一些其他高度敏感的数据。
我在创建加密的属性文件过程中的要求

  1. 一旦创建,就不能重写。
  2. 创建后,任何人都应该无法读取加密数据。


创建后,我将如何在我的项目中使用该文件?

【问题讨论】:

  • 当你写时:一旦创建,应该没有人能够读取加密数据。你到底是什么意思?是否应该使用某人已知的密钥对文件进行加密?或者您只想进行单向加密(散列?)。
  • @Luciano:是的,完全一样。一个人将持有私钥。

标签: java properties encryption-asymmetric


【解决方案1】:

您可以使用 javax.crypto.Cipher[Input|Output]Stream 来读取/写入数据;但是,您必须在代码中强制执行一次写入功能...可能会将数据与 SHA 哈希或其他东西进行比较,以确保它没有被更改。

我遇到过 Java 的开源和商业许可证管理器...您可能需要四处搜索,以免重新发明轮子。

此外,如果您想阻止用户对其进行反编译,您可能希望至少为您的敏感 API 研究混淆工具。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    尝试:Jasypt library 如果它涵盖了您的使用场景。

    它提供了一个EncryptableProperties 类,用于透明地管理和解密 .properties 文件中的加密值。也可以集成到Spring Framework的配置系统中。

    【讨论】:

      【解决方案3】:

      Java 中的标准加密非常简单。我建议查看reference guide 以获取有关如何使用javax.crypto 包的说明。但是,如果它需要存储在客户端计算机上且您不信任用户的敏感数据,我会敦促您重新考虑您的设计。我这么说的原因是为了让您的程序访问信息,它需要将加密/解密密钥存储在内部,这意味着该密钥将存储在某个地方的存档中。在最好的情况下,它将作为变量存储在class 文件之一中。检查二进制类文件以确定此密钥将是微不足道的。至少您应该考虑对您的加密代码进行混淆处理,以至少使仅通过检查二进制代码或反编译类文件来识别密钥变得更加困难。

      【讨论】:

        【解决方案4】:

        查看其他问题的答案:

        Securing a password in a properties file

        在那里,建议使用jasypt

        【讨论】:

          【解决方案5】:

          属性文件是一种人类可读的存储地图的方式。如果您不希望它是人类可读的,它不需要是一个属性文件。

          拥有加密数据的属性文件的一种方法是加密特定字段的值并使用 base 64 将它们转换为文本。

          【讨论】:

            猜你喜欢
            • 2011-04-15
            • 1970-01-01
            • 2015-07-12
            • 2012-08-05
            • 2013-08-20
            • 1970-01-01
            • 2015-12-02
            • 2015-06-11
            • 1970-01-01
            相关资源
            最近更新 更多