Мы переносим данные объемом несколько ТБ с Oracle на SQL Сервер. Однако одно поле содержит пользовательский код Oracle DBMS_CRYPTO, который шифрует определенное число в зашифрованное поле по причинам GDPR.
Функция шифрования Oracle такова:
create or replace function F_HASH(field in number)
return varchar2 deterministic
is
l_encryption integer := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
l_result raw(100);
l_key varchar2(32) := to_char(field) + 'RANd0MsTrinG' + to_char(field)
begin
l_result := sys.dbms_crypto.Encrypt(utl_raw.cast_to_raw(convert(to_char(field),'AL32UTF8')), l_encryption, utl_raw.cast_to_raw(l_key));
return to_char(l_result)
end f_hash;
Из того, что я понял, l_encryption является целым числом, основанным на определенных алгоритмах шифрования в пакете Oracle DBMS_CRYPTO. l_key - это какой-то соленый ключ, основанный на поле с 'raND0mStriNg'. Шифрование происходит в l_result на основе поля , l_encryption и l_key .
Теперь мы можем перенести это поле без проблем к SQL серверу. Мы также можем предварительно рассчитать все эти значения в Oracle и поместить их в SQL Сервер и использовать их в качестве ссылки для будущих значений полей. Тем не менее, мы все еще хотели бы выполнить вычисление шифрования в новой среде базы данных.
Кто-нибудь знает, если SQL Сервер имеет эквивалентную (набор) формулу (e), которая может использоваться, которая имитирует это Oracle функциональность?