Oracle / Python 转换字符串 -> HEX (用于 RAW 列) -> varchar2
我有一个表格,其中有一个RAW类型的字段,用来存放加密后的字符串。
我已经有了将明文加密到这个字段的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;
更新
使用Base64的建议对我有效
Python:
name_enc = base64.b64encode('some text')
PL/SQL:
v_name := utl_raw.cast_to_varchar2(UTL_ENCODE.BASE64_DECODE(:new.name_enc));