[英]Port Oracle encryption function to Postgres
我正在尝试将 Oracle 函数移植到 Postgres。 此函数的目的是使用 AES-256 算法加密数据。 由于我不是 Oracle 或密码学方面的专家,我非常感谢所有可能的帮助。 目标是使用相同的数据和密钥在 Oracle 和 Postgres 中获得相同的加密结果。
Oracle 函数是
function encrypt(data varchar2, key raw) return raw as
begin
return dbms_crypto.encrypt(
utl_i18n.string_to_raw(data, 'AL32UTF8'),
dbms_crypto.ENCRYPT_AES256
+ dbms_crypto.CHAIN_CBC
+ dbms_crypto.PAD_PKCS5,
key
);
end;
我知道这是一个旧线程,但我遇到了同样的问题。 这是使用 AES128 从 oracle/postgres 进行的相同加密/解密
我(到目前为止)还没有在 256 加密方面取得成功,但我也没有放弃。
ORACLE
-----------------
select RAWTOHEX ( DBMS_CRYPTO.encrypt (
src => UTL_I18N.STRING_TO_RAW ('TEST', 'AL32UTF8'),
typ => 6+256+4096/* DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 */,
key => UTL_RAW.cast_to_raw (RPAD ('1234', (128/8))))) val
from dual;
--4710C33D1568176FD6862FC58930B274
select UTL_I18N.RAW_TO_CHAR (DBMS_CRYPTO.decrypt (
src => hextoraw('4710C33D1568176FD6862FC58930B274'),
typ => 6+256+4096/* DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 */,
key => UTL_RAW.cast_to_raw (RPAD ('1234', (128/8)))), 'AL32UTF8') val
from dual;
--TEST
POSTGRES
-----------------
select upper(encode(encrypt('TEST', rpad('1234',128/8)::bytea, 'aes'),'HEX')) VAL;
-- 4710C33D1568176FD6862FC58930B274
select convert_from(decrypt('\x4710C33D1568176FD6862FC58930B274',rpad('1234',128/8)::bytea,'aes'),'SQL_ASCII') VAL;
--TEST
您可以查看pgcrypto
扩展的encrypt
功能。 它可能不是 100% 的替代品,但也许已经足够接近了。
我不是 Postgres 的专家,但似乎 Postgres DBMS_CRYPTO 包只包含在封闭源代码 Postgres EDB 中,而不是 PostgreSQL,并且它只支持 RAW、BLOB 和 CLOB 数据类型,不支持 VARCHAR2。 此外,它支持与 Oracle 不同的一组密码,没有比 AES128 强的密码。 有关详细信息,请参见此处: https : //www.enterprisedb.com/edb-docs/d/edb-postgres-advanced-server/user-guides/database-compatibility-for-oracle-developers-built-in-package-guide /12/Database_Compatibility_for_Oracle_Developers_Built-in_Package_Guide.1.16.html
简而言之,您似乎无法完全按照自己的意愿去做(即使用 DBMS_CRYPTO)。 如果您使用的是 PostgreSQL,则需要查看其他一些替代方案,例如 pg_crypto。 如果您正在考虑 EDB,那么您将需要切换数据类型并牺牲一定程度的安全性来进行切换。
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.