首页 > 解决方案 > 带有 mysql 和 Python 的 AES CBC

问题描述

我正在编写一个在 Python 中存储密码的小程序。我使用模块访问数据库Mysqldb。我想用 加密密码AES 256 with CBC。我正在尝试使用 SQLAES_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()
            ...

标签: encryptionaesmysqlpython

解决方案


推荐阅读