2009-04-21 10 views
1

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)); 

Antwort

2

Müssen Sie in hex kodieren?

Ich denke, es gibt ein Paket (utl_encode) für PL/SQL verfügbar, um Base64 zum Beispiel zu dekodieren, könnten Sie das verwenden?

+0

danke, das hat bei mir funktioniert. siehe Code oben. – GHZ

Verwandte Themen