首页 > 解决方案 > Python, Bcrypt 使用 SQL 连接器检查密码

问题描述

我在我的 Python 程序中使用 SQL-Connector 和 Bcrypt,我将此密码存储在数据库中:

$2b$12$rRkfWn03an8WxtfRSMNd2ebbPrhpbkRONzsAdCmM/goV9XobpOYk6

我想检查用户输入是否与 SQL 数据库中的相同,我可以使用正确的 Bcrypt 函数来执行此操作,但我的问题是,当它从数据库中提取该密码时,它会以这种格式提取它:

[('$2b$12$rRkfWn03an8WxtfRSMNd2ebbPrhpbkRONzsAdCmM/goV9XobpOYk6',)]

显然我无法检查它,因为括号等使它们不匹配,它们需要相同才能通过。我尝试通过加密输入来做到这一点,然后检查它是否在那个字符串中,但显然每次加密密码时,即使密码相同,它也会给出不同的哈希值,所以我必须使用 Bcrypt 函数,它只会通过如果它们相同...有谁知道我将如何从数据库中检索加密密码作为密码而不进行任何一方的格式化?

TLDR:我将如何从 SQL 数据库中检索string字符串[('string')]

非常感谢!!!

标签: pythonformattingbcryptmysql-connector

解决方案


首先,通常您不会将密码存储在数据库中。通常您存储密码中的哈希码

.

(我不擅长解释,但我会尽力而为)

哈希的工作原理是这样的:你输入一个字符串,它会将 is 转换为一个数字。如果输入相同的字符串,这个数字将始终相同,但如果您只知道哈希码,则无法获取该字符串。然后,当您检查密码时,您创建哈希码并检查它是否与数据库中的相同。这种方式更安全。

现在,你的实际问题。我对 SQL 一无所知,但您可以像这样修剪字符串:

password = "(['ThisIsAVeryGoodPassword'])"

letters_to_trim_front = 3
letters_to_trim_back = -3

trimmed_password = password[letters_to_trim_front:letters_to_trim_back]

print(trimmed_password)

应该返回 ThisIsAveryGoodPassword


推荐阅读