0

我目前正在使用 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()

最终我计划添加更多的生活质量功能,但现在加密器功能要求您提供要加密的字符串,使用 Fernet 生成密钥,加密您的字符串,然后打印您的原始字符串,新加密的字符串,和加密密钥。(这不是需要修复的部分。)

解密函数的想法是它从加密函数中获取加密的字符串和密钥。然后它使用密钥解密字符串并打印出来。

我的问题是密钥导致错误。我不确定我是否对解密器进行了错误的编码,或者我只是输入了错误的密钥。

如果这是一个易于解决的问题,我深表歉意,我是 Python 新手,在网上找不到专门针对此问题的任何答案。任何帮助深表感谢!

4

1 回答 1

1

您当前的方法是在函数 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 :-)

于 2021-11-30T10:11:22.463 回答