我正在尝试使用bcrypt
(Python)建立一个安全的登录系统。
现在我得到的错误是TypeError: Unicode-objects must be encoded before checking
。我知道bcrypt
的checkpw()
只将bytes
作为数据类型,但正如您在代码中所看到的,它应该已经被编码为该数据类型。
以下是错误消息:
回溯(最近一次调用):"C:\Users\olive\OneDrive\Dokumenter\Files\skole docs\Programering\test\Fixornot.py文件,第37行,在logreg()中 文件"C:\Users\olive\OneDrive\Dokumenter\Files\skole docs\Programering\test\Fixornot.py",第29行,在logreg登录(logname,logpass) 文件"C:\Users\olive\OneDrive\Dokumenter\Files\skole docs\Programering\test\Fixornot.py",第20行,登录bcrypt.checkpw(logpass,散列) 文件"C:\Users\olive\AppData\Local\Programs\Python\Python39\lib\site-packages\bcrypt_init_.py",第120行,在checkpw中引发TypeError(“Unicode-对象必须在检查前编码”) TypeError: Unicode-对象必须在检查前进行编码
下面是代码(github):
import bcrypt
import hashlib
LR = None
salt = bcrypt.gensalt()
def register ():
print('Making a user')
user = input('Navn: ')
hashed = bcrypt.hashpw(input('password: ').encode('utf-8'), salt)
file = open('user_details.txt','a')
file.write(user + ',' + str(hashed) + ',' + str(salt) + '\n')
file.close()
logreg()
def login (logname, logpass):
file = open('user_details.txt','r')
for i in file:
user, hashed, salt = i.split(',')
bcrypt.checkpw(logpass, hashed)
file.close()
def logreg():
loginregist = input('log/reg? ')
if loginregist == 'log':
print('Du er ved at logge ind')
logname = input('Navn: ')
logpass = bcrypt.hashpw(input('password: ').encode('utf-8'), salt)
login(logname, logpass)
elif loginregist == 'reg':
register()
else:
logreg()
logreg()
发布于 2022-04-07 23:58:09
要修复您的错误:在Github页面的第17行,将模式从'r'
更改为'rb'
。如果您使用前者(作为示例)
with open("blankpaper.txt", 'r') as f:
for line in f:
print(type(line))
您将看到line
的类型是<class 'str'>
。如果在此代码中将'r'
替换为'rb'
,您将看到line
的类型是<class 'bytes'>
,这正是您想要的。
在第19行中,将','
更改为b','
,因为i
是一个bytes
对象。
在做出这些改变之后,你就不应该再做这些改变了
TypeError: Unicode-objects must be encoded before checking
但是,代码中还有其他地方可能会产生错误。
我们知道我们需要使用bytes
对象,但是有几个地方使用unicode字符串,而应该使用bytes
字符串。
变化
user = input('Navn: ')
至
user = input('Navn: ').encode()
更改这两行
file = open('user_details.txt','a')
file.write(user + ',' + str(hashed) + ',' + str(salt) + '\n')
至
file = open('user_details.txt','ab')
file.write(user + b',' + hashed + b',' + salt + b'\n')
在进行了这些更改之后,我成功地运行了一个会话,在这个会话中,我注册了用户名和密码,然后登录。没有任何错误。
如果有什么问题,请告诉我。我希望这能帮到你!
https://stackoverflow.com/questions/71793270
复制相似问题