使用 Fernet 在 Java 上进行对称加密

我想用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 相同的加密标准,以便我可以使用相同的加密密钥?


海绵宝宝撒
浏览 224回答 1
1回答

牧羊人nacy

使用相同的密钥,Python 和 Java 中的实现将完全兼容。但是当然,你必须在两边都使用同一个。如果您使用 Python 代码作为基础,请执行 aprint(key)并将相同的密钥复制到 Java 变体(它将是一个 urlsafebase64 字符串,因此没有传输问题)。在 Java 中生成令牌时,使用SecureRandom()实例。它仅用于 IV,无论如何都是令牌的一部分,因此可用于任何语言的解密代码。Fernet Python 自动使用 good random(它是透明的,你不必选择它)。但是,无论您在生成令牌时在 Java 中选择什么随机数,都不会对解密代码产生任何影响,只需在两个实例中使用相同的密钥字符串即可。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java