1. 程式人生 > >說說在 Oracle 中如何實現 MD5 加密

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