Error: Fernet key must be 32 url-safe base64-encoded bytes
Error: Fernet key must be 32 url-safe base64-encoded bytes
我目前正在 Python 中使用 Fernet 开发一个 ecrypting/decrypting 程序。到目前为止,这是我的代码:
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()
最终我计划添加更多生活质量功能,但现在加密器功能要求您提供要加密的字符串,使用 Fernet 生成密钥,加密您的字符串,然后打印您的原始字符串,您的新加密的字符串和加密密钥。 (这不是需要修复的部分。)
解密函数的想法是它从加密函数中获取加密的字符串和密钥。然后它使用密钥解密字符串并打印出来。
我的问题是密钥导致错误。我不确定我是否将解密器编码错误,或者我是否只是输入错误的密钥。
很抱歉,如果这是一个容易解决的问题,我是 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:-)
我目前正在 Python 中使用 Fernet 开发一个 ecrypting/decrypting 程序。到目前为止,这是我的代码:
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()
最终我计划添加更多生活质量功能,但现在加密器功能要求您提供要加密的字符串,使用 Fernet 生成密钥,加密您的字符串,然后打印您的原始字符串,您的新加密的字符串和加密密钥。 (这不是需要修复的部分。)
解密函数的想法是它从加密函数中获取加密的字符串和密钥。然后它使用密钥解密字符串并打印出来。
我的问题是密钥导致错误。我不确定我是否将解密器编码错误,或者我是否只是输入错误的密钥。
很抱歉,如果这是一个容易解决的问题,我是 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:-)