Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3 PBKDF2HMACBackend default_backend()在java中等效_Java_Python_Cryptography - Fatal编程技术网

Python 3 PBKDF2HMACBackend default_backend()在java中等效

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

我的任务是将一些加密代码从python重写为java。我是Python新手。Python示例:

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')