在 Python 代码中使用 Mysql aes_encrypt() 和 aes_decrypt() 函数

Use Mysql aes_encrypt() and aes_decrypt() functions in Python Code

我想使用 MYSQL aes_encrypt() 和 aes_decrypt() 来自 Python 的函数来加密重要信息。我知道,我们可以使用 python crypto functions

来实现这些

我的场景是: 根据 POST 请求,我有不同字段的列表

{
"email"  :  "abc@gmail.com",
"phone"     :   "1234567890",
"key1"       :  "value1",
"key2"       :  "value2",
"key3"       :  "value3"
}

这个JSON数据可以变化,例如它也可以有其他键(key5,key6,....)或none。 所以我需要构建一个动态SQL查询,比如

sql = "Insert into dummy.test(email, phone, key1, key2, key3) values(email, phone, AES_ENCRYPT('value1', 'secret key'), AES_ENCRYPT('value2', 'secret key'), AES_ENCRYPT('value3', 'secret key'))"
cursor.execute(sql)

values =(email, phone, AES_ENCRYPT('value1', 'secret key'), AES_ENCRYPT('value2', 'secret key'), AES_ENCRYPT('value3', 'secret key')) #TUPLE
sql = "Insert into dummy.test(email, phone, key1, key2, key3) values(%s,%s,%s,%s,%s)"
cursor.execute(sql,values)

是否有任何可能的方法来实现上述任何一种方式。? 这是好方法吗? 谢谢

因为 AES_ENCRYPT 是一个 MySQL 而 不是 一个 Python 函数并且为了避免 SQL 注入攻击,你需要这样做:

sql = """Insert into dummy.test(email, phone, key1, key2, key3)
         values(%s, %s, AES_ENCRYPT(%s, 'secret key'), AES_ENCRYPT(%s, 'secret key'), AES_ENCRYPT(%s, 'secret key'))"""
cursor.execute(sql, (email_value, phone_value, key1_value, key2_value, key3_value))

其中 email_valuephone_value 等是分别为表单字段 emailphone 等发布的值