我想用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相同的加密标准,以便可以使用相同的加密密钥?
发布于 2019-07-11 05:57:03
使用相同的密钥,Python和Java中的实现将完全兼容。当然,在这两种情况下,你必须使用相同的方法。如果您使用Python代码作为基础,那么执行一个print(key)并将相同的密钥复制到Java变体(它将是一个urlsafebase64字符串,所以没有传输问题)。在Java语言中,当生成令牌时,使用SecureRandom()实例。它只用于IV,而且这是令牌的一部分,所以无论是哪种语言的解密代码都可以使用。Fernet Python自动使用良好的随机性(它是透明的,你不必选择它)。但是,无论您在生成令牌时在Java中选择什么随机选项,都不会对解密代码产生任何影响,只需在两个实例中使用相同的密钥字符串即可。
https://stackoverflow.com/questions/56962503
复制相似问题