У меня есть таблица со столбцом RAW для хранения зашифрованной строки.
У меня есть код PL / SQL для шифрования из обычного текста в это поле.
Я хочу создать триггер, связывающий код шифрования.
Я хочу «неправильно использовать» поле RAW, чтобы передать простой текст в триггер. (Я не могу изменить схему, например, чтобы добавить еще один столбец для текстового поля)
Клиент, вставляющий данные, - это Python (cx_Oracle).
Мой вопрос заключается в том, как лучше всего преобразовать строку Python в HEX, а затем обратно в VARCHAR2 в триггере, чтобы код шифрования можно было использовать без изменений (код шифрования ожидает VARCHAR2).
Вот пример:
create table BOB (name_enc raw(16));
В питоне. Это моя первая попытка кодирования, я подозреваю, что мне понадобится что-то более переносимое для международных наборов символов.
name_enc = 'some text'.encode('hex')
Триггер
create or replace trigger enc_bob before insert on BOB
for each row
DECLARE
v_name varchar2(50);
BEGIN
v_name := :new.name_enc; <---- WHAT DO I NEED HERE TO CONVERT FROM HEX to VARCHAR?
--
-- encryption code that expects v_name to contain string
END;
UPDATE
Предложение по использованию Base64 сработало у меня
Python:
name_enc = base64.b64encode('some text')
PL / SQL:
v_name := utl_raw.cast_to_varchar2(UTL_ENCODE.BASE64_DECODE(:new.name_enc));