Oracle / Python Преобразование в строку -> HEX (для столбца RAW) -> varchar2

1

У меня есть таблица со столбцом RAW для хранения зашифрованной строки.

У меня есть код PL/SQL для шифрования из обычного текста в это поле.

Я хочу создать триггер, содержащий код шифрования.

Я хочу "неправильно использовать" поле RAW, чтобы передать обычный текст в триггер. (Я не могу изменить схему, например, чтобы добавить другой столбец для текстового поля)

Клиент, вставляющий данные, - это Python (cx_Oracle).

Мой вопрос - как лучше всего преобразовать из строки python в HEX, а затем вернуться к VARCHAR2 в триггере, чтобы код шифрования можно было использовать без изменений (код шифрования ожидает VARCHAR2).

Вот пример:

create table BOB (name_enc raw(16));

В python. Это моя первоначальная попытка кодирования, я подозреваю, что мне понадобится нечто более портативное для международных наборов символов.

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));
Теги:

1 ответ

2
Лучший ответ

Нужно ли кодировать в hex?

Я думаю, что есть пакет (utl_encode), доступный для PL/SQL для декодирования Base64, например, вы можете использовать это?

  • 0
    спасибо, это сработало для меня. см код выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню