所以我正在用Python 3.7编写一个Python程序,并通过一个名为PyMySQL的模块与我的数据库进行交互。它基本上可以让您通过Python /您的程序在数据库上运行查询。
我一直在搜索SO和Google周围的内容,以找到针对我的问题的解决方案,但是我什么也没发现,所以我会提出疑问。
假设我在“用户”表中有3列,分别是“ UserID”,“ Username”和“ Password”。 我想将“密码”列下的所有字符(字母,数字和特殊字符)替换为每个字符带有星号(*),如果可能,我希望替换发生在制作新条目时,所以我不必对整个数据库的所有列都加负荷,而只需对单个NEW条目加重负荷。
答案 0 :(得分:0)
首先;一个警告。 不 继续您尝试做的事情。这是一个严重的安全风险,实际上会使事情变得更糟。首先,您不应该使用明文密码,但是将它们全部转换为*
会使情况变得更糟,因为我要做的只是猜测序列长度,从而大大降低了复杂度(更不用说使所有用户无效)凭据)。
您应该使用库来生成密码的哈希。有很多,我选择Flask使用的基本密码,因为它不需要设置,并且还会 salt 密码。您也可以使用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))