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