我一直在玩Cryptography package和Fernet (symmetric encryption) module。
加密某些文字时:
key = Fernet.generate_key()
f = Fernet(key)
token = f.encrypt(b"some random text")
令牌始终以相同的字节序列开头,如下所示:"gAAAABU80....."
。
为什么会这样?
答案 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进行编码,这些将随时间变化而变慢。在加密新邮件之前等待几个小时,您将看到标题更改。