我想创建一个加密的属性文件,用于存储与许可证相关的信息和其他一些高度敏感的数据。
我在创建加密属性文件期间的要求
- 一旦创建,不应该是可重写的。
- 一旦创建,没有人应该能够读取加密数据。
创建后,我将如何在我的项目中使用该文件?
我想创建一个加密的属性文件,用于存储与许可证相关的信息和其他一些高度敏感的数据。
我在创建加密属性文件期间的要求
创建后,我将如何在我的项目中使用该文件?
您可以使用 javax.crypto.Cipher[Input|Output]Stream 来读取/写入数据;但是,您将不得不在代码中强制执行一次写入功能......也许将数据与 SHA 哈希或其他东西进行比较,以确保它没有被更改。
我遇到过 Java 的开源和商业许可证管理器……您可能想四处搜索,以免重新发明轮子。
此外,如果您想阻止用户反编译它,您可能希望至少为您的敏感 API 研究混淆工具。
希望这可以帮助。
尝试:Jasypt库,如果它涵盖了您的使用场景。
它提供了一个EncryptableProperties
类,用于透明地管理和解密 .properties 文件中的加密值。也可以将其集成到 Spring Framework 的配置系统中。
Java 中的标准加密非常简单。我建议查看参考指南以获取有关如何使用该javax.crypto
软件包的说明。但是,如果它需要存储在客户端计算机上且您不信任用户的敏感数据,我会敦促您重新考虑您的设计。我这么说的原因是为了让您的程序访问信息,它需要将加密/解密密钥存储在内部,这意味着该密钥将存储在某个地方的存档中。在最好的情况下,它将作为变量存储在其中一个class
文件。检查二进制类文件以确定此密钥将是微不足道的。至少您应该考虑混淆您的加密代码,以至少使仅通过检查二进制代码或反编译类文件来识别密钥变得稍微困难一些。
属性文件是一种人类可读的存储地图的方式。如果您不希望它是人类可读的,它不需要是一个属性文件。
拥有加密数据的 proeprties 文件的一种方法是加密特定字段的值并使用 base 64 将它们转换为文本。