2014-09-01 98 views
2

我想用Java編寫基於密碼的加密和解密!JAVA中的PKCS5或基於密碼的加密(PBE)

這意味着我有一個K (Password)P (plain Text)和創建這樣一個E (encrypted Text),我可以再解密E我的第一個K

當我從喜歡herehere的問題和他們的答案在StackOverflow上提到我的解決方案是PKCS5但他們首先生成KK1,然後編碼K1和生成K1K2。然後用K2加密P並解密E

但這不是我想要的。您每次從K生成K2時,新的K2與上一次的K2不同,因此您無法使用新的K2解密與之前的K2加密的加密文本。

如何在Java中編寫此場景?

回答

1

你錯了。給定相同的密碼和salt(以及迭代次數,但通常會提前修復),您將獲得相同的K1K2。您可以將鹽與密文一起存儲,以便您可以生成相同的K1K2進行解密。

K2鍵編碼/解碼技巧只是因爲Java API的錯誤才需要。 Java的PBKDF2實現會生成算法設置爲"PBE..."的密鑰。該密鑰不一定適用於普通的AES Cipher。因此,使用相同的密鑰字節生成「新」密鑰,但使用不同的算法名稱("AES")。現在,如果您可以在生成期間簡單選擇算法名稱和密鑰大小,則編碼/解碼將不是必需的。但最終,K1和K2實際上是同一個關鍵。