为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2023-03-17 14:10:17
我想用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 中选择什么随机数,都不会对解密代码产生任何影响,只需在两个实例中使用相同的密钥字符串即可。



查看完整回答
反对 回复 2023-03-17
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信