【问题标题】:Oracle / Python Converting to string -> HEX (for RAW column) -> varchar2Oracle / Python 转换为字符串 -> HEX(用于 RAW 列)-> varchar2
【发布时间】:2009-04-22 16:12:12
【问题描述】:

我有一个包含 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));

【问题讨论】:

    标签: python oracle


    【解决方案1】:

    你必须编码成十六进制吗?

    我认为有一个包 (utl_encode) 可用于 PL/SQL 来解码 Base64,例如,您可以使用它吗?

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 2014-09-23
      • 2011-04-27
      • 1970-01-01
      • 2016-08-28
      • 2017-11-25
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多