我想用Java编写基于密码的加密和解密!
这意味着我有K (Password)
和P (plain Text)
并创建了这样的E (encrypted Text)
,然后我可以使用我的第一个E
解密K
。
正如我在StackOverflow中的问题和答案中提到的那样,here
和here
我的解决方案是PKCS5,但他们首先从K1
生成K
然后对其进行编码{ {1}}并从K1
生成K2
。然后使用K1
加密P
并解密E
。
但这不是我想要的。每次从K2
生成K2
时,新K
与上一个K2
不同,因此您无法使用新的K2
加密文本进行解密使用之前的K2
加密的。
如何用Java编写此场景?
答案 0 :(得分:1)
你错了。给定相同的密码和盐(以及迭代计数,但通常会提前修复),您将获得相同的K1
和K2
。您可以使用密文存储salt,以便生成相同的K1
和K2
进行解密。
由于Java API错误,仅需要K2
密钥编码/解码技巧。 Java的PBKDF2实现生成一个将算法设置为"PBE..."
的密钥。普通AES Cipher
不一定接受该密钥。因此,新的" key是使用相同的密钥字节生成的,但使用不同的算法名称("AES"
)。现在,如果您可以在生成期间简单地选择算法名称和密钥大小,则不需要编码/解码。但最终,K1和K2实际上是同一个关键。