密碼欄位,使用md5加密,欄位儲存用raw,避免字符集的問題

arthurtangel發表於2013-02-22

SELECT DBMS_OBFUSCATION_TOOLKIT.MD5(input => utl_raw.cast_to_raw('tg')) a,

       DBMS_OBFUSCATION_TOOLKIT.MD5(input => utl_raw.cast_to_raw('123456')) b,

       DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => 'tg') aa,

       DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => '123456') bb

FROM   dual;

 

 

md5有二種方式:

1,輸入raw,輸出raw

2,輸入varchar2,輸出varchar2

 

如果使用varchar2,則bgk擴充套件unicode時可能出現異常(如果使用多重md5加密),for example:

FUNCTION EncryptPWD(p_User VARCHAR2, p_Pwd VARCHAR2) RETURN VARCHAR2 IS

        v_Pwd  VARCHAR2(60) := DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => p_Pwd);

        v_User VARCHAR2(60) := DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => upper(p_User));

        v_Cmb  VARCHAR2(60);

    BEGIN

        IF p_User IS NULL OR p_Pwd IS NULL THEN

            error(57001); --使用者名稱或密碼不允許為空

        END IF;

        FOR i IN 1 .. least(lengthb(v_Pwd), lengthb(v_User)) LOOP

            v_Cmb := v_Cmb || substrb(v_User, i, 1) || substrb(v_Pwd, i, 1);

        END LOOP;

        RETURN DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => v_Cmb);

    END;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11990065/viewspace-754556/,如需轉載,請註明出處,否則將追究法律責任。

相關文章