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:-)