2010년 2월 17일 수요일

oracle 10g 암호화/복호화

-- 암호화 함수
CREATE OR REPLACE FUNCTION f_Encrypt (p_Input_str  in varchar2) RETURN VARCHAR2
AS
 v_Input_len number := ROUND(LENGTH(p_Input_str)/8+0.5)*8;
 v_Encrypted_str varchar2(2000) := null;
 v_Key varchar2(16) := 'abcdefgh12345678';
BEGIN
   DBMS_OBFUSCATION_TOOLKIT.DESENcrypt(input_string => RPAD(p_Input_str,
                                       v_Input_len),
                                       key_string => v_Key,
                                       encrypted_string =>v_Encrypted_str);

   RETURN v_Encrypted_str;
END;
/

-- 복호화 함수
CREATE OR REPLACE FUNCTION f_Decrypt (p_Encrypted_str in varchar2) RETURN VARCHAR2
AS
 v_Key varchar2(16) := 'abcdefgh12345678';
 v_Decrypted_str varchar2(2000);
BEGIN
   DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(input_string => p_Encrypted_str,
                                     key_string => v_Key,
                                     decrypted_string => v_Decrypted_str);

   RETURN trim(v_Decrypted_str);
END;
/

 


10g

암호화 함수

CREATE OR REPLACE FUNCTION pv_encrypt(v_in_string VARCHAR2)

RETURN RAW IS

    input_raw RAW(1024);

    key_raw RAW(16) := UTL_RAW.CAST_TO_RAW('abcdefghijklmnop');

    v_out_raw RAW(1024);

    AES_CBC_PKCS5 CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES128

                                               + DBMS_CRYPTO.CHAIN_CBC

                                                                         + DBMS_CRYPTO.PAD_PKCS5;

BEGIN

    input_raw := UTL_I18N.STRING_TO_RAW(v_in_string, 'AL32UTF8');

    v_out_raw := DBMS_CRYPTO.ENCRYPT(

        src => input_raw,

             typ => AES_CBC_PKCS5,

        key => key_raw);

 

    RETURN v_out_raw;

 

END pv_encrypt;

/

복호화 함수

CREATE OR REPLACE FUNCTION pv_decrypt(v_in_raw RAW)

RETURN VARCHAR2 IS

    key_raw RAW(16) := UTL_RAW.CAST_TO_RAW('abcdefghijklmnop');

    output_raw RAW(1024);

    v_out_string VARCHAR2(1024);

    AES_CBC_PKCS5 CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES128

                  + DBMS_CRYPTO.CHAIN_CBC

                             + DBMS_CRYPTO.PAD_PKCS5;

BEGIN

    output_raw := DBMS_CRYPTO.DECRYPT(

        src => v_in_raw,

        typ => AES_CBC_PKCS5,

        key => key_raw);

 

    v_out_string := UTL_I18N.RAW_TO_CHAR(output_raw, 'AL32UTF8');

    RETURN v_out_string;

 

END pv_decrypt;

댓글 없음:

댓글 쓰기