2019. 11. 25. 16:39
반응형

create or replace PACKAGE crypto

IS

FUNCTION encrypt

(

    in_str IN VARCHAR2,

    in_key IN VARCHAR2 := 'yourPass'

) RETURN RAW;

FUNCTION decrypt

(

    in_str IN VARCHAR2,

    in_key IN VARCHAR2 := 'yourPass'

) RETURN VARCHAR2;

END crypto;

 

create or replace

PACKAGE BODY crypto

IS

FUNCTION encrypt (in_str IN VARCHAR2, in_key IN VARCHAR2 := 'yourPass')

RETURN RAW

IS

    in_key_raw RAW(16000);

    in_str_raw RAW(16000);

    encrypt_raw RAW(16000);

BEGIN

    in_str_raw := UTL_I18N.STRING_TO_RAW(in_str, 'AL32UTF8');

    in_key_raw := UTL_I18N.STRING_TO_RAW(in_key, 'AL32UTF8');

    encrypt_raw :=

        DBMS_CRYPTO.ENCRYPT(

            src => in_str_raw,

            typ => DBMS_CRYPTO.DES_CBC_PKCS5,

            key => in_key_raw,

            iv => NULL);

RETURN encrypt_raw;

END encrypt;

 

FUNCTION decrypt (in_str IN VARCHAR2, in_key IN VARCHAR2 := 'yourPass')

RETURN VARCHAR2

IS

    in_key RAW(16000);

    decrypt_raw VARCHAR2(16000);

    out_str VARCHAR2(16000);

BEGIN

    in_key_raw := UTL_I18N.STRING_TO_RAW(in_key, 'AL32UTF8');

    decrypt_raw :=

        DBMS_CRYPTO.DECRYPT(

            src => in_str,

            typ => DBMS_CRYPTO.DES_CBC_PKCS5,

            key => in_key_raw,

            iv => NULL);

    out_str := UTL_I18N.RAW_TO_STRING(decrypt_raw, 'AL32UTF8');

RETURN out_str;

END decrypt;

END crypto;

 

 

-- 호출

SELECT crypto.encrypt('TEST') FROM dual;

SELECT crypto.decrypt(crypto.encrypt('TEST')) FROM dual;

반응형
Posted by seongsland