我们有一个在 linux 上运行的 java 应用程序。当应用程序崩溃并重新启动时——我们需要恢复(持久化)之前运行时存储的非常敏感的信息(全局静态变量)。不允许使用数据库(不安全)。同样重要的是,没有人可以不可察觉地更改此信息(例如覆盖文件等)。
提前致谢
我们有一个在 linux 上运行的 java 应用程序。当应用程序崩溃并重新启动时——我们需要恢复(持久化)之前运行时存储的非常敏感的信息(全局静态变量)。不允许使用数据库(不安全)。同样重要的是,没有人可以不可察觉地更改此信息(例如覆盖文件等)。
提前致谢
我建议使用Jasypt。您可以实现Externalizable
和加密对象流
BasicPasswordEncryptor encryptor = new BasicPasswordEncryptor();
String cipher = encryptor.encryptPassword(<<stream to encrypt as string>>);
...
if (encryptor.checkPassword(inputPassword, encryptedPassword)) {
// correct!
} else {
// bad login!
}
为了保护数据,您需要对其进行加密。在 CBC 或 CTR 模式下使用 AES-256 和 PKCS7 填充。不要将加密密钥存储在您的应用程序中。您可以存储 IV/nonce,因为它不需要是安全的。
为确保数据不被更改,请使用HMAC和 SHA-256。您必须为 HMAC 使用与 AES 不同的密钥。