错误- encrypt() ....位置参数:`data`
Error- encrypt() .... positional argument : `data`
所以我一直试图制作一个编码器和解码器只是为了好玩。因为我是 python 的新手,所以我通常坐下来尝试自己调试代码,但似乎这很难。希望得到一些帮助 :).
Error =
ValueError: Fernet key must be 32 url-safe base64-encoded bytes.
from cryptography.fernet import Fernet as dpsisbad
question1 = input("Do You Have A Key? (yes - y and no - n)\n")
if question1 == "y":
key = input("Enter Your Key Here \n")
print(key)
else:
key = dpsisbad.generate_key()
print("Please Keep this Key Safely.\n")
print(key)
dpsstalks = dpsisbad(key)
question2 = input("Do You Want to Encode Or Decode The Message? (Encode = e and Decode = d)\n")
if question2 == "e":
gg = input("Enter the text you want to encode. \n")
encoded_text = gg.encode()
token = dpsstalks.encrypt(encoded_text)
print(token)
else:
text1 = input("Enter the the encrypted text. \n")
token = dpsstalks.decrypt(text1)
print(token)
我 运行 前段时间遇到过类似的问题。您的代码几乎是正确的,问题是您没有考虑到这样一个事实,即在 python 中,方法 input() 只接受字符串作为输入(因此当您在输入中写入 b'abcd' 时,它将采用整个字符串作为一个字符串,它会忽略 b'',因为它会认为它是字符串的一部分)。出于这个原因,在打印出密钥和令牌时都必须对其进行解码,并且必须在 input() 方法中对它们进行编码,代码应如下所示:
from cryptography.fernet import Fernet as dpsisbad
question1 = input("Do You Have A Key? (yes - y and no - n)\n")
if question1 == "y":
key = input("Enter Your Key Here \n").encode()
print(key.decode())
else:
key = dpsisbad.generate_key()
print("Please Keep this Key Safely.\n")
print(key.decode())
dpsstalks = dpsisbad(key)
while True:
question2 = input("Do You Want to Encode Or Decode The Message? (Encode = e, Decode = d, quit = q)\n")
if question2 == "e":
gg = input("Enter the text you want to encode. \n")
encoded_text = gg.encode()
token = dpsstalks.encrypt(encoded_text)
print(token.decode())
elif question2 == "d":
text1 = input("Enter the the encrypted text. \n").encode()
token = dpsstalks.decrypt(text1)
print(token.decode())
elif question2 in ("q", "exit", "quit"):
break
while 和 last elif 并不是真正需要的,我添加它们只是为了更容易测试并且不必每次都重新启动程序。
抱歉我的英语不好,但我不是母语人士。
如果我没说清楚。
编辑:
在输出中你也可以做这样的事情:
str(token)[2 : -1]
它实际上在做什么,它是将令牌转换为字符串并删除前两个字符 (b') 和最后一个字符 ('),但我不会这样做,因为它的工作量并不大正确的方法,无论如何我都会向你说明,因为它可能对你有用(如果只是修改字符串)。
所以我一直试图制作一个编码器和解码器只是为了好玩。因为我是 python 的新手,所以我通常坐下来尝试自己调试代码,但似乎这很难。希望得到一些帮助 :).
Error =
ValueError: Fernet key must be 32 url-safe base64-encoded bytes.
from cryptography.fernet import Fernet as dpsisbad
question1 = input("Do You Have A Key? (yes - y and no - n)\n")
if question1 == "y":
key = input("Enter Your Key Here \n")
print(key)
else:
key = dpsisbad.generate_key()
print("Please Keep this Key Safely.\n")
print(key)
dpsstalks = dpsisbad(key)
question2 = input("Do You Want to Encode Or Decode The Message? (Encode = e and Decode = d)\n")
if question2 == "e":
gg = input("Enter the text you want to encode. \n")
encoded_text = gg.encode()
token = dpsstalks.encrypt(encoded_text)
print(token)
else:
text1 = input("Enter the the encrypted text. \n")
token = dpsstalks.decrypt(text1)
print(token)
我 运行 前段时间遇到过类似的问题。您的代码几乎是正确的,问题是您没有考虑到这样一个事实,即在 python 中,方法 input() 只接受字符串作为输入(因此当您在输入中写入 b'abcd' 时,它将采用整个字符串作为一个字符串,它会忽略 b'',因为它会认为它是字符串的一部分)。出于这个原因,在打印出密钥和令牌时都必须对其进行解码,并且必须在 input() 方法中对它们进行编码,代码应如下所示:
from cryptography.fernet import Fernet as dpsisbad
question1 = input("Do You Have A Key? (yes - y and no - n)\n")
if question1 == "y":
key = input("Enter Your Key Here \n").encode()
print(key.decode())
else:
key = dpsisbad.generate_key()
print("Please Keep this Key Safely.\n")
print(key.decode())
dpsstalks = dpsisbad(key)
while True:
question2 = input("Do You Want to Encode Or Decode The Message? (Encode = e, Decode = d, quit = q)\n")
if question2 == "e":
gg = input("Enter the text you want to encode. \n")
encoded_text = gg.encode()
token = dpsstalks.encrypt(encoded_text)
print(token.decode())
elif question2 == "d":
text1 = input("Enter the the encrypted text. \n").encode()
token = dpsstalks.decrypt(text1)
print(token.decode())
elif question2 in ("q", "exit", "quit"):
break
while 和 last elif 并不是真正需要的,我添加它们只是为了更容易测试并且不必每次都重新启动程序。 抱歉我的英语不好,但我不是母语人士。 如果我没说清楚。
编辑: 在输出中你也可以做这样的事情:
str(token)[2 : -1]
它实际上在做什么,它是将令牌转换为字符串并删除前两个字符 (b') 和最后一个字符 ('),但我不会这样做,因为它的工作量并不大正确的方法,无论如何我都会向你说明,因为它可能对你有用(如果只是修改字符串)。