所以我正在用 Python 3.7 编写一个 Python 程序,并通过一个名为 PyMySQL 的模块与我的数据库进行交互。它基本上允许您通过 Python/您的程序在数据库上运行查询。
我一直在搜索 SO 和 Google 来解决我的问题,但我什么也没找到,所以我要问一下。
假设我在“用户”表中有 3 列“用户 ID”、“用户名”和“密码”。我想用每个字符的星号(*)替换“密码”列下的各种字符(字母、数字和特殊字符),如果可能,我希望在创建新条目时进行替换,所以我不必在所有列上加载整个数据库,而是在单个新条目上加载。
第一的; 一个警告。不要不继续与你想要做什么。这是一个严重的安全风险,实际上会使事情变得更糟。首先,您不应该使用明文密码,但是将它们全部转换*
会使情况变得更糟,因为我要做的就是猜测序列长度,从而显着降低复杂性(更不用说,使您的所有用户凭据无效)。
您应该使用库来生成密码的哈希值。有多个,我选择 Flask 使用的基础版本,因为它不需要设置并且还会对密码加盐。您还可以使用hashlib
等。
from werkzeug.security import check_password_hash, generate_password_hash
password = 'hello123'
pass_hash = generate_password_hash(password)
print(pass_hash) # STORE THIS
print(check_password_hash(pass_hash, 'hello')) # False
print(check_password_hash(pass_hash, 'hello123')) # True
不要尝试创建自己的哈希算法,始终依赖专业包。
你应该能够简单地解决这个问题:
cursor.execute("""
SELECT user_id, password
FROM users
""")
data = cursor.fetchall()
hashed = []
for user, password in data:
hashed.append([generate_password_hash(password), user])
cursor.executemany("""
UPDATE users
SET password = %s
WHERE user_id = %s
""", (hashed))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句