我想用Java编写基于密码的加密和解密!
这意味着我有一个K (Password)
和P (plain Text)
并创建了一个E (encrypted Text)
,然后我可以用我的第一个E
解密该K
。
正如我在StackOverflow中的问题及其答案(如here
和here
)中提到的那样,我的解决方案是PKCS5,但是它们首先从K1
生成K
,然后对该K1
进行编码,然后从K2
生成K1
。然后加密P
并使用该E
解密K2
。
但这不是我想要的。每次从K2
生成K
时,新的K2
与上一个K2
不同,因此您无法使用新的K2
解密用先前的K2
加密的加密文本。
如何用Java编写此方案?
最佳答案
你误会了。给定相同的密码和盐(以及迭代次数,但是通常预先确定),您将获得相同的K1
和K2
。您可以将盐与密文一起存储,以便可以生成相同的K1
和K2
进行解密。
仅由于Java API错误,才需要K2
密钥编码/解码技巧。 Java的PBKDF2实现生成一个密钥,该密钥的算法设置为"PBE..."
。普通AES Cipher
不一定必须接受该密钥。因此,将使用相同的密钥字节但使用不同的算法名称("AES"
)来生成“新”密钥。现在,如果您只需在生成过程中选择算法名称和密钥大小,就无需进行编码/解码。但最后,K1和K2实际上是相同的密钥。
关于java - JAVA中的PKCS5或基于密码的加密(PBE),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25600328/