Используйте функции Mysql aes_encrypt() и aes_decrypt() в коде Python.

Я хочу использовать функции MYSQL aes_encrypt() и aes_decrypt() из Python для шифрования важной информации. Я знаю, что мы можем реализовать их с помощью криптофункций python

Мой сценарий: из запроса POST у меня есть список различных полей

{
"email"  :  "[email protected]",
"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)

or

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)

Есть ли возможный способ реализовать любой из вышеперечисленных способов.? Это хороший подход? Спасибо


person Rahul Reddy    schedule 20.11.2019    source источник


Ответы (1)


Поскольку AES_ENCRYPT — это функция MySQL, а не функция Python, и во избежание атак SQL Injection вам нужно сделать это следующим образом:

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_value, phone_value и т. д. — значения, которые были размещены соответственно для полей формы email, phone и т. д.

person Booboo    schedule 29.11.2019