【问题标题】:converting varchar to md5将 varchar 转换为 md5
【发布时间】:2015-01-13 18:21:35
【问题描述】:

我在 oracle 客户端 11g 中有以下 sql 代码。我想将“ssno”转换为 md5 哈希。我读过其他帖子,但没有一个具体说明将代码放在哪里。谢谢!

 SELECT FS_HIRES."rsa",
        FS_HIRES."ssno",
        FS_HIRES."lname",
        FS_HIRES."series",
        FS_HIRES."grade",
        FS_HIRES."pos_title",
        FS_HIRES."ethnicity",
        FS_HIRES."disability",
        FS_HIRES."type_appt",
        FS_HIRES."Perm_Temp",
        FS_HIRES."gender",
        FS_HIRES."age",
        FS_HIRES."age_categories",
        FS_HIRES."los",
        FS_HIRES."date_apnt",
        FS_HIRES."mm_apnt",
        FS_HIRES."yy_apnt",
        FS_HIRES."apnt_noa",
        FS_HIRES."apnt_auth",
        FS_HIRES.L2_DESC,
        FS_HIRES.L3_DESC,
        FS_HIRES.L4_DESC,
        FS_HIRES.L5_DESC,
        FS_HIRES."fy"
   FROM FS_HIRES

【问题讨论】:

  • select md5(yourfield), ...?或者无论该功能碰巧在 oracle 中。

标签: sql oracle oracle11g md5


【解决方案1】:

HASH_MD5 常量不能直接从 SQL 中引用,所以这样的语句:

 SELECT FS_HIRES."rsa",
        DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW(FS_HIRES."ssno", 'AL32UTF8'),
          DBMS_CRYPTO.HASH_MD5),
        ...

会收到类似“ORA-06553: PLS-221: 'HASH_MD5' is not an procedure or is undefined”的错误。您可以使用该常量的内部值,即 2:

 SELECT FS_HIRES."rsa",
        DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW(FS_HIRES."ssno", 'AL32UTF8'), 2),
        ...

或者,如果您不想依赖可能在未来版本中发生变化的常量,请定义您自己的函数:

create or replace function my_md5(p_str varchar2) return raw is
begin
  return dbms_crypto.hash(utl_i18n.string_to_raw(p_str, 'AL32UTF8'),
    dbms_crypto.hash_md5);
end my_md5;
/

...然后调用它:

 SELECT FS_HIRES."rsa",
        MY_MD5(FS_HIRES."ssno", 'AL32UTF8') AS "ssno",
        ...

如果你的数据库字符不是 AL32UTF8,你可能需要做更多的转换as mentioned in the documentation,在函数中隐藏它也会更容易。

【讨论】:

  • 谢谢。我就是这样做的。创建了函数。在我的表中添加了一个新字段,然后使用该函数更新了表。非常好!谢谢大家。
【解决方案2】:

试试这个:

select 
'123456789' as ssno,
rawtohex(
DBMS_CRYPTO.Hash (
    UTL_I18N.STRING_TO_RAW ('123456789', 'AL32UTF8'),
    2)
) as ssno_md5
from dual;

输出:

SSNO    SSNO_MD5
123456789   25F9E794323B453885F5181F1B624D0B

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 2013-04-07
    • 2011-12-11
    • 2021-05-22
    • 2013-02-28
    • 2010-09-05
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多