繁体   English   中英

错误:Fernet 密钥必须是 32 个 url 安全的 base64 编码字节

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM