我正在编写一个用Python存储密码的小程序。我使用Mysqldb
模块访问数据库。
我想用AES 256 with CBC
加密密码。我正在尝试使用SQL AES_ENCRYPT
函数。
我将cbc模式设置为:
mysql> SET block_encryption_mode = 'aes-256-cbc';
所以在python中,我有:
def add_password(self, table, site, password, key, iv):
try:
query = "INSERT INTO " +table+ " (sites, password) VALUES (AES_ENCRYPT(%s, %s, %s), AES_ENCRYPT(%s,%s,%s) )"
self.cursor.execute(query, ( site, key, iv, password, key, iv))
self.conn.commit()
...
但是,如果运行我得到的程序:
Warning: <IV> option ignored
,好像该函数使用ECB模式(所以没有iv)。
哪里错了?
可能的方式: 或者用python模块更好地加密所有数据并将数据插入数据库已加密?
修改
似乎如果我每次都添加SET block_encryption_mode = 'aes-256-cbc'
,那么所有人都会这样做。
def add_password(self, table, site, password, key,iv):
try:
query = "SET block_encryption_mode = 'aes-256-cbc'"
self.cursor.execute(query)
query = "INSERT INTO " +table+ " (sites, password) VALUES (AES_ENCRYPT(%s, %s, %s), AES_ENCRYPT(%s,%s,%s) )"
self.cursor.execute(query, ( site, key,iv, password, key, iv))
self.conn.commit()
...