2009-04-21 161 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

相关问题