MySQL - 用 Python 替换列的所有字符

MySQL - Replace all characters of a column with Python

所以我在 Python 3.7 中编写了一个 Python 程序,并且我通过一个名为 PyMySQL 的模块与我的数据库进行交互。它基本上允许您通过 Python/your 程序 运行 查询数据库。

我一直在搜索 SO 和 Google 以找到解决我的问题的方法,但我一无所获,所以我要问一下。

假设我在 table "Users" 中有 3 列,"UserID"、"Username" 和 "Password"。 我想用每个字符的星号 (*) 替换 "Password" 列下的各种字符(字母、数字和特殊字符),如果可能的话,我希望在创建新条目时进行替换,所以我不必在所有列上对整个数据库施加负载,而是在单个新条目上施加负载。

首先;一个警告。 而不是 继续您正在尝试做的事情。这是一个严重的安全风险,实际上会使事情 变得更糟 。首先,你不应该有明文密码,但将它们全部转换为 * 会使情况变得更糟,因为那样我所要做的就是猜测序列长度,大大降低复杂性(更不用说,使你的所有用户无效凭证)。

您应该使用一个库来生成密码的哈希值。有多个,我选择了 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))