为什么Fernet加密令牌始终以相同的顺序开始? (Python加密包)

时间:2015-02-27 22:39:46

标签: python cryptography

我一直在玩Cryptography packageFernet (symmetric encryption) module

加密某些文字时:

key = Fernet.generate_key()
f = Fernet(key)
token = f.encrypt(b"some random text")

令牌始终以相同的字节序列开头,如下所示:"gAAAABU80....."

为什么会这样?

1 个答案:

答案 0 :(得分:7)

您可以从阅读the source code收集,加密的有效负载具有以下结构:

b"\x80" + struct.pack(">Q", current_time) + iv + ciphertext

以及从encrypt返回的是有效负载的base64编码。

第一个字节是0x80,硬编码。以下8个字节是64位时间戳,采用big-endian顺序。由于它是时间戳,因此最重要的字节将随时间缓慢变化。 Big-endian被命令MSB到LSB,所以那些“粘性”字节是你在读取字符串时会遇到的第一个字节。

Base64(部分)字符串gAAAABU80编码54位,几乎是7个字节。因此,该部分对0x80魔法和时间戳的6个MSB进行编码,这些将随时间变化而变慢。在加密新邮件之前等待几个小时,您将看到标题更改。