用python替换列的所有字符

dphi5xsq  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(424)

因此,我正在用python3.7编写一个python程序,并通过一个名为pymysql的模块与我的数据库进行交互。它基本上允许您通过python/您的程序在数据库上运行查询。
我一直在搜索所以和谷歌,以找到解决我的问题,但我没有找到什么,所以我要问它。
例如,我在“users”表中有3列“userid”、“username”和“password”。我想用每个字符的星号(*)替换“password”列下的各种字符(字母、数字和特殊字符),如果可能的话,我希望在创建新条目时进行替换,因此我不必在所有列上加载整个数据库,而是在单个新条目上加载。

6yoyoihd

6yoyoihd1#

第一;警告。不要继续你想做的事。这是一个严重的安全风险,实际上会让事情变得更糟。首先,你不应该有明文密码,但把它们都转换成 * 使情况更糟,因为我所要做的就是猜测序列长度,大大降低了复杂性(更不用说,使所有用户凭据失效)。
您应该使用库来生成密码哈希。有多个,我选择的基础一个由 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))

相关问题