說說在 Oracle 中如何實現 MD5 加密
阿新 • • 發佈:2019-01-24
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哈哈~