python - 试图加密
问题描述
免责声明:我不太擅长python,如果这是我看不到的一些简单问题,我很抱歉。
基本上我想创建一个登录和注册系统,将用户名和密码存储在一个文本文件中,然后我想加密该文件中的数据。我以前从未做过加密,所以我从网上获取了登录和注册系统的代码来测试和试用。我遇到了很多以前从未见过的错误,所以我只需要一些帮助。我还没有完成解密(如果这很重要的话)。抱歉,如果我粘贴太多,我只是不知道如何解决这个问题。加密部分是 def Encryption(): 我在 def FSSignup(): 中实现它。
from cryptography.fernet import Fernet
from tkinter import *
import os
creds = 'tempfile.temp' #
def Signup():
global pwordE
global nameE
global roots
roots = Tk()
roots.title('Signup')
intruction = Label(roots, text='Please Enter new Credidentials\n')
intruction.grid(row=0, column=0, sticky=E)
nameL = Label(roots, text='New Username: ')
pwordL = Label(roots, text='New Password: ')
nameL.grid(row=1, column=0, sticky=W)
pwordL.grid(row=2, column=0, sticky=W)
nameE = Entry(roots)
pwordE = Entry(roots, show='*')
nameE.grid(row=1, column=1)
pwordE.grid(row=2, column=1)
signupButton = Button(roots, text='Signup', command=FSSignup)
signupButton.grid(columnspan=2, sticky=W)
roots.mainloop()
def Encryption():
file = open('Encryption.txt', 'rb' )
key = file.read()
file.close()
with open('tempfile.temp', 'rb') as f:
data = f.read()
fernet = Fernet(key)
encrypted = fernet.encrypt(data)
with open('tempfile.temp.encrypted', 'wb') as f:
f.write(encrypted)
def FSSignup():
with open(creds, 'w') as f:
f.write(nameE.get())
f.write('\n')
f.write(pwordE.get())
f.close()
Encryption()
roots.destroy()
Login()
def Login():
global nameEL
global pwordEL
global rootA
rootA = Tk()
rootA.title('Login')
intruction = Label(rootA, text='Please Login\n')
intruction.grid(sticky=E)
nameL = Label(rootA, text='Username: ')
pwordL = Label(rootA, text='Password: ')
nameL.grid(row=1, sticky=W)
pwordL.grid(row=2, sticky=W)
nameEL = Entry(rootA)
pwordEL = Entry(rootA, show='*')
nameEL.grid(row=1, column=1)
pwordEL.grid(row=2, column=1)
loginB = Button(rootA, text='Login', command=CheckLogin)
loginB.grid(columnspan=2, sticky=W)
rmuser = Button(rootA, text='Delete User', fg='red', command=DelUser)
rmuser.grid(columnspan=2, sticky=W)
rootA.mainloop()
def CheckLogin():
with open(creds) as f:
data = f.readlines()
uname = data[0].rstrip()
pword = data[1].rstrip()
if nameEL.get() == uname and pwordEL.get() == pword:
r = Tk()
r.title(':D')
r.geometry('150x50')
rlbl = Label(r, text='\n[+] Logged In')
rlbl.pack()
r.mainloop()
else:
r = Tk()
r.title('D:')
r.geometry('150x50')
rlbl = Label(r, text='\n[!] Invalid Login')
rlbl.pack()
r.mainloop()
def DelUser():
os.remove(creds)
rootA.destroy()
Signup()
if os.path.isfile(creds):
Login()
else:
Signup()
以下是我不知道的错误。
Tkinter 回调中的异常:
回溯(最后一次调用):文件“C:\Users\admin\AppData\Local\Programs\Python\Python37-32\lib\tkinter__init__.py”,第 1702 行,调用 返回 self.func(*args)
FSSignup Encryption() 中的文件“C:\Users\admin\Desktop\Py1A\SignUpSystem\Thing123.py”,第 52 行
文件“C:\Users\admin\Desktop\Py1A\SignUpSystem\Thing123.py”,第 39 行,在 Encryption fernet = Fernet(key)
文件“C:\Users\admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\cryptography\fernet.py”,第 35 行,在init key = base64.urlsafe_b64decode(key)
文件“C:\Users\admin\AppData\Local\Programs\Python\Python37-32\lib\base64.py”,第 133 行,在 urlsafe_b64decode 返回 b64decode(s)
文件“C:\Users\admin\AppData\Local\Programs\Python\Python37-32\lib\base64.py”,第 87 行,在 b64decode 返回 binascii.a2b_base64(s)
binascii.Error:不正确的填充
这发生在我注册后,它会尝试加密新的用户名和密码。
解决方案
您的 Fernet 密钥似乎有问题。你的Encryption.txt
文件内容是什么?
这是引发错误的行:
fernet = Fernet(key)
key
正在从 Encryption.txt 读取,我怀疑它是无效的。
要检查这个假设是否正确,只需将行替换为:
fernet = Fernet.generate_key()
如果一切正常,则文件 Encryption.txt 中的密钥(以字节为单位)不正确。您可以生成一个新密钥Fernet.generate_key()
并将其放入其中。
>>> key = Fernet.generate_key()
>>> key
b'ZmDfcTF7_60GrrY167zsiPd67pEvs0aGOv2oasOM1Pg='
正如 Hans 在评论中指出的那样,您可能正试图以二进制文件打开文件,而它只是一个文本文件。b
要检查这是否是错误,请通过删除from将文件简单地作为文本文件读取rb
,如下所示:
file = open('Encryption.txt', 'r')
推荐阅读
- reactjs - 在同一个组件中映射和渲染两个不同的数组 - React
- python-3.x - 如何读取 ibd 文件中的字节数(subprocess.check_output 返回码)
- java - jar 中没有主要清单属性
- png - 使用 binwalk 仅提取一种文件类型
- spring - Spring-Boot:组件的可扩展性
- python - 'function'对象在django中没有属性'get'错误
- node.js - 主版本和cpanel版本之间的NPM版本差异
- python - 在 Windows 10 上安装 TensorFlow 时出现问题
- angular - 将一个角度应用程序导航到另一个角度应用程序时量角器超时错误
- postgresql - _eq 对不同表中 ID 的权限值?