Порт Oracle функция шифрования до Postgres - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь перенести функцию 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;

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Вы можете взглянуть на функцию encrypt расширения pgcrypto. Это может быть не 100% замена, но, возможно, это достаточно близко.

0 голосов
/ 31 марта 2020

Я не эксперт в 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, то вам нужно переключить типы данных и пожертвовать некоторым уровнем безопасности, чтобы сделать это.

...