Python 属性错误:';字节';对象没有属性';在"时间"加密"x27;多花呢
只是尝试使用Python 属性错误:';字节';对象没有属性';在"时间"加密"x27;多花呢,python,python-cryptography,fernet,Python,Python Cryptography,Fernet,只是尝试使用multivernet加密纯文本 我的代码是: from cryptography.fernet import Fernet, MultiFernet fetnet_keys = [ Fernet.generate_key(), Fernet.generate_key() ] mulfern = MultiFernet(fetnet_keys) enc = mulfern.encrypt("My Message in Plain Text
multivernet
加密纯文本
我的代码是:
from cryptography.fernet import Fernet, MultiFernet
fetnet_keys = [
Fernet.generate_key(),
Fernet.generate_key()
]
mulfern = MultiFernet(fetnet_keys)
enc = mulfern.encrypt("My Message in Plain Text".encode('utf-8'))
print(enc)
尝试加密纯文本时,我得到:
Traceback (most recent call last):
File "encryption1.py", line 21, in <module>
enc = mulfern.encrypt("My Message in Plain Text".encode('utf-8'))
File "venv3.8\lib\site-packages\cryptography\fernet.py", line 169, in encrypt
return self.encrypt_at_time(msg, int(time.time()))
File "venv3.8\lib\site-packages\cryptography\fernet.py", line 172, in encrypt_at_time
return self._fernets[0].encrypt_at_time(msg, current_time)
AttributeError: 'bytes' object has no attribute 'encrypt_at_time'
回溯(最近一次呼叫最后一次):
文件“encryption1.py”,第21行,在
enc=mulfern.encrypt(“我的纯文本邮件”。encode('utf-8'))
文件“venv3.8\lib\site packages\cryptography\fernet.py”,第169行,加密
返回self.encrypt_at_time(msg,int(time.time()))
文件“venv3.8\lib\site packages\cryptography\fernet.py”,第172行,在加密时
返回self.\u fernets[0]。在\u时间加密\u(消息,当前\u时间)
AttributeError:“bytes”对象没有“加密时间”属性
解决方案是什么?Fernet.generate_key()
返回一个bytes
对象。该键应用于初始化Fernet
对象。获取Fernet
对象的列表。注意multivernet
使用列表中的第一个密钥进行加密,但通过尝试每个密钥进行解密
例如:
从cryptography.fernet导入fernet、multivernet、InvalidToken
old_key=Fernet(Fernet.generate_key())
new_key=Fernet(Fernet.generate_key())
mulfern=Multipernet([新密钥,旧密钥])
old_enc=old_key.encrypt(b'old message')
印刷品(旧版)
new_enc=mulfern.encrypt(我的纯文本消息)
打印(新附件)
尝试:
打印(旧密钥。解密(新密钥))
除InvalidToken外:
打印('old_key failed')
打印(mulfern.解密(旧加密))
打印(多重解密(新加密))
输出:
b'gaaaabgo0evjyapic3jhybc8itppwenhpo16s_suoaq3uzuxuutcxemvfr62zevw53lpj9mdyo2a5ys2dpp77b61jhybrfq='
b'GAAAABGO0EV8A4IXT6HHGVJ8UDKR1GJFJMCFG-Wd96NOR8lrpkhS7USVrZj0WiF74druiZHiDhXxxSt1Wb2CURHYdlZ8-o0SEcEhfOzEl66qgVX2pyNP6Y='
旧密钥失败
“旧消息”
“我的纯文本信息”
谢谢你,马克。是的,这是正确的。但是Fernet的一个问题是,它生成的加密字符串超过120个字符。但需要较短的长度,如:32等