说说在 Oracle 中如何实现 MD5 加密

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哈哈~

你可能感兴趣的:(Oracle)