重新连接到数据库会导致以null结尾的二进制字符串

2024-05-15 14:56:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个密码验证系统。我有一个二进制(60)列来存储密码,我正在使用bcrypt散列。当我使用相同的pymysql连接来存储和检索密码时,我能够验证密码。但是,当我创建新连接时,密码不再验证

特别是我遇到的问题是,当我有一个新连接时返回的结果在末尾有一堆空字节。我试着剥去这些,但结果仍然不匹配(b'$2b$12$Y9iqA5faupXeUcCzS8jrEOkBdQrpLOCUp\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'vsb'$2b$12$Yzpcua55O0RSNqqSzTZ/k.JcZy6ValV8uTXLpcEzXHM8MYLVlFSoa'

我存储或编码这些散列的方式是否有问题

# CONNECTING #
conn = pymysql.connect(os.environ["db_host"], 
                        user=os.environ["db_user"], 
                        passwd=os.environ["db_password"],
                        db=os.environ["db_name"], 
                        connect_timeout=5, 
                        charset='utf8mb4')
# STORING #
newlyhashed = bcrypt.hashpw(apikey.encode(), bcrypt.gensalt())
cur.execute("UPDATE api_users \
                          SET secret = _binary %s \
                          WHERE api_users.name = %s", 
            [pymysql.Binary(newlyhashed),"user"])
# RETRIEVING #
dcur.execute("SELECT secret FROM api_users \
              WHERE api_users.name = %s","user")
# VERIFYING #
verify = row["secret"]
bcrypt.checkpw(apikey.encode(), verify)

Tags: nameapi密码dbsecretosconnectenviron
1条回答
网友
1楼 · 发布于 2024-05-15 14:56:43

断开和重新连接之间的区别应该告诉我!如果返回的结果与两个不同的连接不同,则可能忽略了提交

我相信空字节是我尝试使用PhpMyAdmin更新哈希时的产物。剥离它们并没有什么区别,因为散列实际上是一个不同的密码

相关问题 更多 >