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

Postgres decrypting differences between v9 and v12 (pgcrypto 1.1 vs 1.3)

提问人:Marcin Zareba 提问时间:11/15/2023 最后编辑:Marcin Zareba 更新时间:11/16/2023 访问量:59

问:

我被迫将现有数据库迁移到 AWS RDS。RDS 最早的 Postgres 版本是 v12,而以前数据库运行在 v9.6(带有扩展)上。pgcrypto v1.1

我使用 和 移动了数据。一些数据是加密的,一些 SQL 函数用于解密这些数据,但此函数在 pgcrypto v1.3 中不可用(这是您可以在 RDS psql12 中获得的唯一扩展版本)。我可以使用 pgcrypto 的功能或其他任何东西以某种方式解密数据吗?尝试了所有可用的算法/模式/填充组合的功能,尝试将密钥转换为纯文本或将其用作纯文本,但我得到的只是.pg_dumppg_restorerijndael_decryptdecryptdecryptbyteaERROR: 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$+
PostgreSQL PSQL rijndael pgcrypto

评论

2赞 nbk 11/15/2023
解密 OLSSsystem 中的数据以清除文本,然后插入使用新加密加密的文本
0赞 Marcin Zareba 11/15/2023
当然,如果这是最后的手段,那么我想我可以这样做。只是想确认仅在新数据库中没有办法做到这一点。
1赞 Frank Heikens 11/15/2023
题外话:版本 12 将于明年停产,您必须再次迁移。就我个人而言,我至少会移动到版本 15。
0赞 Marcin Zareba 11/15/2023
谢谢你,不知道,明年再来一次肯定是地狱。
1赞 jjanes 11/16/2023
访问 pgcrypto 定义的 C 函数的 SQL 函数应具有 .您显示的定义看起来像是来自其他包,并且不使用扩展框架。我认为你不会有任何运气让RDS支持这个未知的软件包。AS '$libdir/pgcrypto'

答:

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