我有一个任务将一些加密代码从 python 重写为 java。我是Python新手。 Python 示例:
import default_backend
backend = default_backend()
PBKDF2HMAC(hashes.SHA256(), 32, salt, iterations, backend)
据我所知here “backend”是 PBKDF2HMACBackend 的一个实例。
我用 Java 编写了下一个代码:
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
SecretKey tmp = factory.generateSecret(new PBEKeySpec(???.toCharArray(), salt, iterations, 256));
在 PBEKeySpec 的构造函数中,第一个参数是密码,相当于 python 代码中的“后端”。正如我在 python 代码中所理解的,它通过库定义为默认值。但是我应该如何在我的java代码中定义这个参数呢?我可以使用一些随机值或常数吗?或者也许存在一些 default_backend() 等效项?
更新:获取 key 的完整 python 代码:
PBKDF2HMAC(hashes.SHA256(), 32, salt, iterations, backend).derive("somePassword")
最佳答案
在Python代码中,密码在derive
方法中传递,该方法在发布的代码中缺少调用,here :
kdf = PBKDF2HMAC(...)
key = kdf.derive(b'MyPassword')
密码与后台不对应。后端提供了支持加密、散列等操作的方法,并有更详细的描述,here 。
另请注意,Python 代码中使用 SHA256,而 Java 代码中使用 SHA1。由于以Python代码为引用,因此Java代码中必须应用PBKDF2WithHmacSHA256
。
关于java - Java 中的 Python 3 PBKDF2HMACBackend default_backend() 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60230195/