繁体   English   中英

用Fernet在Java上进行对称加密

[英]Symmetric Encryption on java with Fernet

我想使用Fernet模块对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中生成令牌时在Java中选择哪种随机选择,都不会对解密代码产生任何影响,只是在两种情况下都使用相同的密钥字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM