Oracle 在 DBMS_OBFUSCATION_TOOLKIT 包中提供了 MD5 加密函数,它的定义如下:
DBMS_OBFUSCATION_TOOLKIT.MD5(
input IN RAW,
checksum OUT raw_checksum);
DBMS_OBFUSCATION_TOOLKIT.MD5(
input_string IN VARCHAR2,
checksum_string OUT varchar2_checksum);
DBMS_OBFUSCATION_TOOLKIT.MD5(
input IN RAW)
RETURN raw_checksum;
DBMS_OBFUSCATION_TOOLKIT.MD5(
input_string IN VARCHAR2)
RETURN varchar2_checksum;
参数名 | 类型 | 说明 |
---|---|---|
input | RAW | 需要加密的对象。 |
checksum | RAW | 加密后的对象。 |
input_string | VARCHAR2 | 需要加密的对象。 |
checksum_string | VARCHAR2 | 加密后的对象。 |
raw_checksum | RAW(16) | 加密后的对象。 |
varchar2_checksum | VARCHAR2(16) | 加密后的对象。 |
RAW,类似于 CHAR,声明方式为 RAW(L), L 为长度,以字节为单位,作为数据库列最大 2000 字节,作为变量最大 32767 字节 。
LONG RAW ,类似于 LONG ,作为数据库列最大存储 2G 字节的数据,作为变量最大 32760 字节。
RAW 类型的好处就是:在网络中的计算机之间传输 RAW 数据时,或者使用 Oracle 实用程序将 RAW 数据从一个数据库移到另一个数据库时, Oracle 服务器不执行字符集转换 。 存储实际列值所需要的字节数大小随每行大小而异,最多为 2000 字节 。 可能这样的数据类型在数据库效率上会提高,而且对数据由于字符集的不同而导致的不一致的可能性在这里也被排除了 。
现在建立 MD5 函数:
CREATE OR REPLACE FUNCTION MD5(pass IN VARCHAR2)
RETURN VARCHAR2 IS v VARCHAR2(32);
BEGIN
v:=utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => pass));
RETURN v;
END;
这里使用了 utl_raw.cast_to_raw 函数,用于把 VARCHAR2 类型的值转化为 RAW。
调用示例:
select md5(1) from dual;
是不是很简单呀O(∩_∩)O哈哈~
网友评论