Python 3 PBKDF2HMACBackend default_backend()在java中等效
我的任务是将一些加密代码从python重写为java。我是Python新手。Python示例:Python 3 PBKDF2HMACBackend default_backend()在java中等效,java,python,cryptography,Java,Python,Cryptography,我的任务是将一些加密代码从python重写为java。我是Python新手。Python示例: import default_backend backend = default_backend() PBKDF2HMAC(hashes.SHA256(), 32, salt, iterations, backend) 正如我读到的,“backend”是PBKDF2HMACBackend的一个实例 我用Java编写了下一个代码: SecretKeyFactory factory = Sec
import default_backend
backend = default_backend()
PBKDF2HMAC(hashes.SHA256(), 32, salt, iterations, backend)
正如我读到的,“backend”是PBKDF2HMACBackend的一个实例
我用Java编写了下一个代码:
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
SecretKey tmp = factory.generateSecret(new PBEKeySpec(???.toCharArray(), salt, iterations, 256));
在PBEKeySpec的构造函数中,第一个参数是密码,它相当于python代码中的“backend”。在python代码中,我通过库将其定义为默认值。但是我应该如何在java代码中定义这个参数呢?我可以使用一些随机值或常量吗?或者可能存在一些默认的_backend()等价物
更新:获取密钥的完整python代码:
PBKDF2HMAC(hashes.SHA256(), 32, salt, iterations, backend).derive("somePassword")
在Python代码中,密码在
derivate
方法中传递,其调用在发布的代码中丢失:
密码与后端不对应。后端提供了支持加密、散列等操作的方法,对此进行了更详细的描述
还要注意,Python代码中使用了SHA256,Java代码中使用了SHA1。因为Python代码是参考,所以Java代码中必须应用PBKDF2WithHmacSHA256。Python加密包中的整个后端业务是一个无法解释的复杂性,没有任何好处。我完全不知道它为什么会在那里。当您在一个加密类上调用
getInstance()
时,Java会自动选择此“后端”(在Java ese中称为提供者)的Java等价物。如果在极少数情况下,您绝对必须有一个特定的提供程序,那么您可以使用带有提供程序参数的getInstance()
方法之一。“在发布的代码中缺少调用的派生方法”-是的,这是我的错。所以,我必须将密码放入新的PBEKeySpec(“mySuperPass.toCharray()”)中,对吗?
kdf = PBKDF2HMAC(...)
key = kdf.derive(b'MyPassword')