python - Python, Bcrypt 使用 SQL 连接器检查密码
问题描述
我在我的 Python 程序中使用 SQL-Connector 和 Bcrypt,我将此密码存储在数据库中:
$2b$12$rRkfWn03an8WxtfRSMNd2ebbPrhpbkRONzsAdCmM/goV9XobpOYk6
我想检查用户输入是否与 SQL 数据库中的相同,我可以使用正确的 Bcrypt 函数来执行此操作,但我的问题是,当它从数据库中提取该密码时,它会以这种格式提取它:
[('$2b$12$rRkfWn03an8WxtfRSMNd2ebbPrhpbkRONzsAdCmM/goV9XobpOYk6',)]
显然我无法检查它,因为括号等使它们不匹配,它们需要相同才能通过。我尝试通过加密输入来做到这一点,然后检查它是否在那个字符串中,但显然每次加密密码时,即使密码相同,它也会给出不同的哈希值,所以我必须使用 Bcrypt 函数,它只会通过如果它们相同...有谁知道我将如何从数据库中检索加密密码作为密码而不进行任何一方的格式化?
TLDR:我将如何从 SQL 数据库中检索string
字符串[('string')]
非常感谢!!!
解决方案
首先,通常您不会将密码存储在数据库中。通常您存储密码中的哈希码。
.
(我不擅长解释,但我会尽力而为)
哈希的工作原理是这样的:你输入一个字符串,它会将 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
推荐阅读
- python - Python - win32 - 下划线
- python - Python spark:如何在 databricks 中使用 spark 并行化 Spark Dataframe 计算
- ios - 如何将解析后的数据存储在数组中?
- anylogic - 如何找出将“agent.remove”发送到我的 moveTo 块的内容?
- python - 如何从字符串中分离整数并将其转换为浮点数
- php - Laravel - 返回对 AJAX 请求的响应后继续运行功能
- c++ - 在 Windows 上使用 CMake 强制静态链接
- javascript - React 项目 firebase 部署显示欢迎屏幕
- symfony - 尝试登录用户 [Symfony 3.4] FOSUserBundke+Lexik+FosRest 时获得匿名
- c - 使用 C 中的包装函数进行递归合并排序