我想用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")>>> tokenb'...'>>> f.decrypt(token)b'my deep dark secret我怎样才能获得与 python 相同的加密标准,以便我可以使用相同的加密密钥?
1 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
使用相同的密钥,Python 和 Java 中的实现将完全兼容。但是当然,你必须在两边都使用同一个。如果您使用 Python 代码作为基础,请执行 aprint(key)
并将相同的密钥复制到 Java 变体(它将是一个 urlsafebase64 字符串,因此没有传输问题)。在 Java 中生成令牌时,使用SecureRandom()
实例。它仅用于 IV,无论如何都是令牌的一部分,因此可用于任何语言的解密代码。Fernet Python 自动使用 good random(它是透明的,你不必选择它)。但是,无论您在生成令牌时在 Java 中选择什么随机数,都不会对解密代码产生任何影响,只需在两个实例中使用相同的密钥字符串即可。
添加回答
举报
0/150
提交
取消