Python 3.x 如何在Fernet(Python 3.9)中使用decrypt_at_time函数

Python 3.x 如何在Fernet(Python 3.9)中使用decrypt_at_time函数,python-3.x,encryption,fernet,Python 3.x,Encryption,Fernet,我有一个加密和解密文本的项目。我正在使用Fernet加密和解密。我学会了如何使用encrypt\u at_time函数,但我不懂decrypt\u at_time函数。我被看在这里: 它说我必须在decrypt\u at\u time()函数中写入token、ttl和current\u time。令牌是加密文本,但我不明白什么是ttl和current\u time 我想从加密文本中获取加密时间。我怎么做 我想从加密文本中获取加密时间。我怎么做 Fernet令牌的结构为,s: 其中版本为1字节长

我有一个加密和解密文本的项目。我正在使用Fernet加密和解密。我学会了如何使用
encrypt\u at_time
函数,但我不懂
decrypt\u at_time
函数。我被看在这里:

它说我必须在
decrypt\u at\u time()
函数中写入
token
ttl
current\u time
。令牌是加密文本,但我不明白什么是
ttl
current\u time

我想从加密文本中获取加密时间。我怎么做

我想从加密文本中获取加密时间。我怎么做

Fernet令牌的结构为,s:

其中版本为1字节长,时间戳为8字节,IV为16字节,密文为16字节的倍数,HMAC为32字节

这里的时间戳是UTC 1970-01-01 00:00:00和令牌创建之间经过的时间(以秒为单位)。因此,从时间戳可以确定以秒为单位的经过时间,并由此确定日期s:

我不懂在时间解密函数…我不懂 什么是ttl和当前时间

在使用第二个参数(
current_time
)时,可以将任意时间指定为令牌的创建时间。这里必须再次指定时间(以秒为单位),该时间在UTC 1970-01-01 00:00:00和声称的令牌创建时间之间经过。通过将加密替换为以下内容,可以使用上述代码轻松测试这一点:

token = f.encrypt_at_time(b'My secret data', 0)
print(getCreationDateTime(token)) # 1970-01-01 00:00:00
将1970-01-01 00:00:00 UTC设置为创建时间

在第三个参数中(
current_time
)可用于指定任意时间作为解密时间(同样是1970-01-01 00:00:00 UTC和令牌声称的解密时间之间经过的时间,以秒为单位)。第二个参数(
ttl
)指定令牌创建后有效的时间(秒)。测试:

token = f.encrypt_at_time(b'My secret data', 0)
plaintext = f.decrypt_at_time(token, 45, 30)
print(plaintext) # b'My secret data'

此处,令牌应在UTC 1970-01-01 00:00:00创建,并在UTC 1970-01-01 00:00:30执行解密。令牌是有效的,因为它在创建后45秒内有效。

非常感谢,我现在理解正确了。祝你过得愉快!:)
token = f.encrypt_at_time(b'My secret data', 0)
print(getCreationDateTime(token)) # 1970-01-01 00:00:00
token = f.encrypt_at_time(b'My secret data', 0)
plaintext = f.decrypt_at_time(token, 45, 30)
print(plaintext) # b'My secret data'