提问人:Marcin Zareba 提问时间:11/15/2023 最后编辑:Marcin Zareba 更新时间:11/16/2023 访问量:59
Postgres 解密 v9 和 v12 之间的差异(pgcrypto 1.1 与 1.3)
Postgres decrypting differences between v9 and v12 (pgcrypto 1.1 vs 1.3)
问:
我被迫将现有数据库迁移到 AWS RDS。RDS 最早的 Postgres 版本是 v12,而以前数据库运行在 v9.6(带有扩展)上。pgcrypto v1.1
我使用 和 移动了数据。一些数据是加密的,一些 SQL 函数用于解密这些数据,但此函数在 pgcrypto v1.3 中不可用(这是您可以在 RDS psql12 中获得的唯一扩展版本)。我可以使用 pgcrypto 的功能或其他任何东西以某种方式解密数据吗?尝试了所有可用的算法/模式/填充组合的功能,尝试将密钥转换为纯文本或将其用作纯文本,但我得到的只是.pg_dump
pg_restore
rijndael_decrypt
decrypt
decrypt
bytea
ERROR: decrypt error: Data not a multiple of block size
编辑: 从数据库添加函数定义:
postgres=# select pg_get_functiondef(oid) from pg_proc where proname = 'rijndael_decrypt';
pg_get_functiondef
----------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION public.rijndael_decrypt(key text, input_text bytea) +
RETURNS text +
LANGUAGE c +
STRICT +
AS '/c_extensions/pg_rijndael/pg_rijndael', $function$rijndael_decrypt$function$+
答:
0赞
Maimoona Abid
11/16/2023
#1
更改加密和解密方法以利用 PostgreSQL 12 的pgp_sym_decrypt,该在 pgcrypto 1.3 中可用。确保您的应用程序代码已正确调整,并测试修改后的函数。
试试这个;
CREATE OR REPLACE FUNCTION public.decrypt_data(key text, encrypted_data bytea)
RETURNS text
LANGUAGE sql
AS $$
SELECT pgp_sym_decrypt(encrypted_data, key, 'cipher-algo=aes256');
$$;
希望对您有所帮助:)
评论
0赞
Marcin Zareba
11/16/2023
不幸的是,我一直在得到,我应该将键或值转换为某些东西吗?ERROR: Wrong key or corrupt data
评论
AS '$libdir/pgcrypto'