2011-12-04 124 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