Python,使用 SQL-Conncector 检查 Bcrypt 密码

问题描述

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

$2b$12$rRkfWn03an8WxtfRSMNd2ebbPrhpbkRONzsAdCmM/goV9XobpOYk6

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

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

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

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

非常感谢!!!

解决方法

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

.

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

Hash 的工作原理是这样的:你输入一个字符串,它把 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