2011-12-04 91 views
4

我在我们基于Java的软件中使用JASYPT加密解密密码。我们就是这样,加密密码:将加密密钥存储在Java代码中?

 StrongTextEncryptor textEncryptor = new StrongTextEncryptor(); 
     textEncryptor.setPassword(PASSWORD_ENCRYPTION_KEY); 
     String ePasswd = textEncryptor.encrypt(txtPasswd); 

现在,在这里,我应该如何存储这个PASSWORD_ENCRYPTION_KEY在上面的代码中使用?在Java程序中存储和访问这些密钥的最安全或最常见的方式是什么?

感谢, 深

+0

最安全的地方是“不在用户的计算机上”。 – millimoose

+1

您可能想要阅读http://ronrothman.com/public/leftbraned/password-security-its-not-that-hard-but-you-still-cant-get-it-right/。如果您的软件以可以恢复它们的方式存储密码,那么即使您使用加密对它们进行了模糊处理,特别是在将加密密钥与加密数据一起存储的情况下,也会出错。 –

+0

你在那里存储什么类型的密码?如果是用户密码,请按照詹姆斯克拉克的建议,使用咸味散列......如果不是,则取决于该密码的背景 – DarkSquirrel42

回答

2

无处...

你should't的PASSWORD_ENCRYPTION_KEY存储在你的程序,因为这是错误的做法。像owlstead已经指出:你需要一个Public key infrastructure

基本上你可以加密每个需要访问它的用户的PDF,所以他们可以用他们的个人私钥解密。这可以通过用AES-256对PDF进行加密来完成,然后用来自每个用户的公钥对使用的密钥进行加密。这些亲自加密的密钥是安全的存储。

+0

你会如何做到这一点,没有人登录的无头应用程序?在这种情况下,我能想到的唯一ID就是应用运行的unix用户的ID。你会在哪里保存该用户的私钥?当然,这将在'/ home/user/.ssh /'目录中,因此在同一台机器上。 – Adam