![](/img/trans.png)
[英]fernet key error "Fernet key must be 32 url-safe base64-encoded bytes"
[英]Error: Fernet key must be 32 url-safe base64-encoded bytes
我目前正在使用 Fernet 在 Python 中开发一个加密/解密程序。 到目前为止,这是我的代码:
from cryptography.fernet import Fernet
def decrypter():
enc_message = input("Input an encrypted string:\n")
key = input("Input a key:\n")
fernet = Fernet(key)
dec_message = fernet.decrypt(enc_message).decode()
print(dec_message)
def encrypter():
message = input("Input a string to encrypt:\n")
key = Fernet.generate_key()
fernet = Fernet(key)
enc_message = fernet.encrypt(message.encode())
print("")
print("Original string: ", message)
print("")
print("Encrypted string: ", repr(enc_message))
print("")
print("Key: ", repr(key))
print("")
dec_message = fernet.decrypt(enc_message).decode()
print("Decrypted string: ", dec_message)
encrypter()
decrypter()
最终我计划添加更多的生活质量功能,但现在加密器 function 要求您提供要加密的字符串,使用 Fernet 生成密钥,加密您的字符串,然后打印您的原始字符串,新加密的字符串,以及加密密钥。 (这不是需要修复的部分。)
解密器 function 的想法是,它从加密器 function 获取加密的字符串和密钥。 然后它使用密钥解密字符串并打印出来。
我的问题是密钥导致错误。 我不确定我是否对解密器进行了错误的编码,或者我只是输入了错误的密钥。
如果这是一个易于解决的问题,我深表歉意,我是 Python 的新手,在网上找不到任何专门针对此问题的答案。 任何帮助深表感谢!
您当前的方法是在函数 dectrypter 和 encryptor 中进行所有输入和打印。 这意味着,如果您想对加密结果做一些稍微不同的事情,您就必须重写这些函数。
如果您将执行工作的函数的输入和打印分开,您的代码将更加可重用和模块化,如下所示:
from cryptography.fernet import Fernet
def encrypter(key,plaintext):
fernet = Fernet(key)
enc_message = fernet.encrypt(plaintext.encode())
return enc_message
def decrypter(key,ciphertext):
fernet = Fernet(key)
dec_message = fernet.decrypt(ciphertext).decode()
return dec_message
def generatekey():
key = Fernet.generate_key()
return key
if __name__=="__main__":
# comment out input() so code can be tested simply
#plaintext = input("Input a string to encrypt:\n")
plaintext= "A test message"
key = generatekey()
ciphertext = encrypter(key,plaintext)
print("")
print("Original string: ", plaintext)
print("")
print("Encrypted string: ", repr(ciphertext))
print("")
print("Key: ", repr(key))
print("")
decoded_message = decrypter(key,ciphertext)
print("Decrypted string: ", decoded_message)
现在您可以编写另一个文件,该文件导入上述文件并使用生成密钥、加密器和解密器,可能从用户那里获取输入,而根本不知道或使用 fernet:-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.