Ich habe eine Tabelle mit einer RAW-Spalte für eine verschlüsselte Zeichenfolge.Oracle/Python Konvertieren in Zeichenfolge -> HEX (für RAW-Spalte) -> varchar2
Ich habe den PL/SQL-Code für die Verschlüsselung von Klartext in dieses Feld.
Ich möchte einen Trigger erstellen, der den Verschlüsselungscode enthält.
Ich möchte das RAW-Feld "missbrauchen", um den Klartext in den Trigger zu übergeben. (Ich kann das Schema nicht ändern, um beispielsweise eine weitere Spalte für das Klartextfeld hinzuzufügen.)
Der Client, der die Daten einfügt, ist Python (cx_Oracle).
Meine Frage ist, wie man am besten aus einem Python-String in HEX, dann wieder zu VARCHAR2 im Trigger, so dass der Verschlüsselungscode ohne Änderung (Verschlüsselungscode erwartet VARCHAR2) verwendet werden kann.
Hier ist ein Beispiel:
create table BOB (name_enc raw(16));
In Python. Dies ist mein erster Versuch der Kodierung, ich vermute, dass ich etwas mehr Portable für internationale Zeichensätze brauche.
name_enc = 'some text'.encode('hex')
Der Auslöser
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
Der Vorschlag Base64 für die Verwendung für mich gearbeitet
Python:
name_enc = base64.b64encode('some text')
PL/SQL:
v_name := utl_raw.cast_to_varchar2(UTL_ENCODE.BASE64_DECODE(:new.name_enc));
danke, das hat bei mir funktioniert. siehe Code oben. – GHZ