2009-04-21 88 views
1

我有一個包含RAW列的表格用於保存加密字符串。Oracle/Python轉換爲字符串 - > HEX(用於RAW列) - > varchar2

我有用於從純文本加密到這個字段的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)); 

回答

2

您是否必須編碼爲十六進制?

我認爲有一個包(utl_encode)可用於PL/SQL來解碼Base64例如,你可以使用它?

+0

謝謝,這對我有用。見上面的代碼。 – GHZ 2009-04-21 14:00:28

相關問題