dee*_*eef 2 python cryptography
我一直在使用Cryptography包和Fernet(对称加密)模块.
加密某些文本时,如:
key = Fernet.generate_key()
f = Fernet(key)
token = f.encrypt(b"some random text")
Run Code Online (Sandbox Code Playgroud)
令牌始终以相同的字节序列开头,如下所示:"gAAAABU80.....".
为什么是这样?
您可以通过阅读源代码来收集,加密的有效负载具有以下结构:
b"\x80" + struct.pack(">Q", current_time) + iv + ciphertext
Run Code Online (Sandbox Code Playgroud)
你从中得到encrypt的是有效载荷的base64编码.
第一个字节是0x80硬编码的.以下8个字节是64位时间戳,采用big-endian顺序.由于它是时间戳,因此最重要的字节将随时间缓慢变化.Big-endian被命令MSB到LSB,所以那些"粘性"字节是你在读取字符串时会遇到的第一个字节.
Base64(部分)字符串gAAAABU80编码54位,几乎是7个字节.因此,该部分编码0x80魔法和时间戳的6个MSB,那些随时间变化较慢的MSB.在加密新邮件之前等待几个小时,您将看到标题更改.