我遇到了一个问题。使用 . 从表中的加密列中进行选择psycopg2
。使用创建测试表后
create table users (
id BIGSERIAL NOT NULL PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
secret_val_1 BYTEA,
secret_val_2 BYTEA
);
我能够将加密的值插入其中。
现在我正在尝试使用psycopg2
with 从表中查询值:
cur.execute("""
SELECT PGP_SYM_DECRYPT(%s::BYTEA, 'compress-algo=1, cipher-algo=aes256')
FROM users;
""",
('secret_val_1',))
现在这引发了一个错误:
ExternalRoutineInvocationException: Wrong key or corrupt data
有趣的是,当像这样传递值时,它可以工作:
def query_users_decrypt(col):
cur.execute("""
SELECT PGP_SYM_DECRYPT({}::BYTEA, 'compress-algo=1, cipher-
algo=aes256') FROM users;
""".format(col),
(col,))
但这对于 sql-injection 攻击并不安全,对吧?
有谁知道如何正确地做到这一点?谢谢!