java - Java 中的 Python 3 PBKDF2HMACBackend default_backend() 等效项

标签 java python cryptography

我有一个任务将一些加密代码从 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/

相关文章:

javascript - 如何从静态源生成 crypto.createCipheriv 参数

java - 更改标题组和第一项菜单之间的抽屉间距

java - HTTPServer 发布参数

python - 直接以 NLTK 模式应用字符串

python - 导入错误:没有名为 xlwt 的模块

php - 从 Azure Active Directory 验证 JWT

java持久化 native sql不接受参数

java - 通用可调用

python - 使用 channel 2 向一位用户发送通知

security - 非对称 key 容器的相互转换(例如 : X. 509、PGP、OpenSSH)