Oracle / Python 转换字符串 -> HEX (用于 RAW 列) -> varchar2

1 投票
1 回答
4551 浏览
提问于 2025-04-15 11:11

我有一个表格,其中有一个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));

1 个回答

2

你需要把它编码成十六进制吗?

我觉得有一个包(utl_encode)可以在PL/SQL中用来解码Base64,比如你可以用这个吗?

撰写回答