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

У меня есть таблица со столбцом 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));

1 Ответ

2 голосов
/ 21 апреля 2009

Вы должны закодировать в шестнадцатеричный код?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...