繁体   English   中英

错误:Fernet 密钥必须是 32 个 url 安全的 base64 编码字节。 每当尝试运行程序时

[英]Error: Fernet key must be 32 url-safe base64-encoded bytes. Whenever trying to run the program

这是我的代码,我正在尝试制作一个 Fernet 解码器,但是每当我尝试运行该程序时,我都会收到此错误:

ValueError: Fernet key must be 32 URL-safe base64-encoded bytes.
import dearpygui.dearpygui as dpg
from cryptography.fernet import Fernet
import base64

def GetCrypto():
   Crypt = dpg.get_value("CG")
   Pass =  dpg.get_value("CP")
   fernet = Fernet(Pass)


   decMessage = fernet.decrypt(Crypt).decode('utf-8')
   print(decMessage)


dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()
dpg.create_viewport(title='Custom Title', width=600, height=200)
with dpg.window(label="KEIKAS", width=600, height=250):
    dpg.add_input_text(tag="CG", label="Cryptografy")
    dpg.add_input_text(tag="CP", label="Cryptografy Password")
    dpg.add_button(label="Decrypt", callback = GetCrypto)
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

键:b'KnX5YN3hvP54jOIMkacWdqxFX1RKk8cjqVZjGJbAscM='

我不知道您在 GUI 中输入了什么值,但这对我有用:

也许您在错误的Input Text中使用了错误的值。
或者,也许您忘记将string编码为bytes

from cryptography.fernet import Fernet

Pass   = b'KnX5YN3hvP54jOIMkacWdqxFX1RKk8cjqVZjGJbAscM='
#Pass   = 'KnX5YN3hvP54jOIMkacWdqxFX1RKk8cjqVZjGJbAscM='.encode('utf-8')
fernet = Fernet(Pass)

text = "Hello World!"

Crypto = fernet.encrypt(text.encode('utf-8')).decode('utf-8')
print('Crypto:', Crypto)

decMessage = fernet.decrypt(Crypto.encode('utf-8')).decode('utf-8')
print('decMessage:', decMessage)

结果:

Crypto: gAAAAABjHPqIoajV-v1V7pginMhkwFBtJfZCLpJjmsT7AxHpc3guBX5otRqJWK5gCWxLh9Iy_9LhoQTzk3en2DDr_OwcWT276A==
decMessage: Hello World!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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