Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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
基于Fernet的java对称加密_Java_Python_Security_Encryption - Fatal编程技术网

基于Fernet的java对称加密

基于Fernet的java对称加密,java,python,security,encryption,Java,Python,Security,Encryption,我想用这个模块对python和java之间的消息进行加密和解密。但我不明白他们举的例子 反序列化现有密钥: final Key key = new Key("cw_0x689RpI-jtRR7oE8h_eQsKImvJapLeSbXpwF4e4="); 创建令牌: final Token token = Token.generate(random, key, "secret message"); 反序列化现有令牌: final Token token = Token.fromString("

我想用这个模块对python和java之间的消息进行加密和解密。但我不明白他们举的例子

反序列化现有密钥:

final Key key = new Key("cw_0x689RpI-jtRR7oE8h_eQsKImvJapLeSbXpwF4e4=");
创建令牌:

final Token token = Token.generate(random, key, "secret message");
反序列化现有令牌:

final Token token = Token.fromString("gAAAAAAdwJ6wAAECAwQFBgcICQoLDA0ODy021cpGVWKZ_eEwCGM4BLLF_5CV9dOPmrhuVUPgJobwOz7JcbmrR64jVmpU4IwqDA==");
为什么需要一个随机参数来加密机密消息?我用python实现了fermet加密,它从不要求任何随机性来源

>>> from cryptography.fernet import Fernet
>>> key = Fernet.generate_key()
>>> f = Fernet(key)
>>> token = f.encrypt(b"my deep dark secret")
>>> token
b'...'
>>> f.decrypt(token)
b'my deep dark secret

如何获得与python相同的加密标准,以便使用相同的加密密钥?

使用相同的密钥,python和Java中的实现将完全兼容。当然,两边都要用同一个。如果使用Python代码作为基础,请执行
print(key)
并将该键复制到Java变量(它将是一个urlsafebase64字符串,因此没有传输问题)。在Java中,生成令牌时,请使用
SecureRandom()
实例。它只用于IV,而且这是令牌的一部分,因此可以用于任何语言的解密代码。Fernet Python自动使用良好的随机性(它是透明的,您不必选择它)。但是,无论您在Java中生成令牌时选择何种随机方式,都不会对解密代码产生任何影响,只需在两个实例中使用相同的密钥字符串。

使用相同的密钥,Python和Java中的实现将完全兼容。当然,两边都要用同一个。如果使用Python代码作为基础,请执行
print(key)
并将该键复制到Java变量(它将是一个urlsafebase64字符串,因此没有传输问题)。在Java中,生成令牌时,请使用
SecureRandom()
实例。它只用于IV,而且这是令牌的一部分,因此可以用于任何语言的解密代码。Fernet Python自动使用良好的随机性(它是透明的,您不必选择它)。但是,在Java中生成令牌时,无论您选择何种随机方式,都不会对解密代码产生任何影响,只需在两种情况下使用相同的密钥字符串。

在我看来,需要一个
random
参数是一个设计错误。库应该只使用一个SecureRandom实例来处理这个问题。Fernet python正确地做到了这一点,Java也可以轻松地做到这一点。现在,只要在需要随机参数的地方使用
new SecureRandom()
。在我看来,需要
Random
参数是一个设计错误。库应该只使用一个SecureRandom实例来处理这个问题。Fernet python正确地做到了这一点,Java也可以轻松地做到这一点。现在,只要在需要随机参数的地方使用
new SecureRandom()
。当然,可以在Java代码的生成行中指定在哪里使用
SecureRandom()
?@Vai。您已经这样做了,不是吗?您可以指定我必须在哪里使用Java代码中生成行中的
secureRandom()
?@Vai吗。你已经做到了,不是吗?