我在做一个密码验证系统。我有一个二进制(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)
断开和重新连接之间的区别应该告诉我!如果返回的结果与两个不同的连接不同,则可能忽略了提交
我相信空字节是我尝试使用PhpMyAdmin更新哈希时的产物。剥离它们并没有什么区别,因为散列实际上是一个不同的密码
相关问题 更多 >
编程相关推荐