【问题标题】:Use Mysql aes_encrypt() and aes_decrypt() functions in Python Code在 Python 代码中使用 Mysql aes_encrypt() 和 aes_decrypt() 函数
【发布时间】:2019-11-20 05:01:39
【问题描述】:

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

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

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

此 JSON 数据可能会有所不同,例如 它还可以有其他键(key5、key6、....)或没有。 所以我需要构建一个动态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)

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

【问题讨论】:

    标签: python mysql sql python-3.x aes


    【解决方案1】:

    由于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等发布的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 2011-06-20
      • 2023-03-10
      • 2013-01-03
      相关资源
      最近更新 更多