postgresql Postgres解密v9和v12之间的差异(pgcrypto 1.1 vs 1.3)

w1e3prcc  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(125)

我被迫将现有的数据库迁移到AWS RDS。RDS的最早版本的Postgres是v12,而以前的数据库运行在v9.6(带有pgcrypto v1.1扩展)上。
我使用pg_dumppg_restore移动了数据。有些数据是加密的,有些SQL函数使用rijndael_decrypt来解密这些数据,但是这个函数在pgcrypto v1.3中不可用。(这是你能在RDS psql 12中获得的唯一版本的扩展).我可以用pgcrypto的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$+

字符串

mnemlml8

mnemlml81#

更改加密和解密方法以利用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');
$$;

字符串
希望对你有帮助:)

相关问题