我想使用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中相同的加密标准,以便可以使用相同的加密密钥?
答案 0 :(得分:0)
使用相同的键,Python和Java中的实现将完全兼容。但是,当然双方都必须使用相同的一方。如果您使用Python代码作为基础代码,请执行print(key)
并将相同的密钥复制到Java变体(它将是urlsafebase64字符串,因此不会出现传输问题)。在Java中,生成令牌时,请使用SecureRandom()
实例。它仅用于IV,并且无论如何都是令牌的一部分,因此可以使用任何语言的解密代码。 Fernet Python自动使用良好的随机性(它是透明的,您不必选择它)。但是,无论您在Java中生成令牌时在Java中选择哪种随机选择,都不会对解密代码产生任何影响,只是在两种情况下都使用相同的密钥字符串即可。