1. sys계정으로 암호화 하여 아래 권한을 준다.
grant execute on dbms_crypto to public;
2. 생성한다...  계정이 USER01 이면
CREATE OR REPLACE package body USER01.crypt_ase256
IS
    c_aeskey char(32) := '12345678901234567890123456789012';
    /**
     * encryption type이 아래와 같이 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5일 경우
     * output_string의 길이는 (int(input_string/16)+1)*32 이다.
     * 즉 input_string의 길이가 100일 경우 output_string의 길이는 224이다.
     *
     * key_string는 32자리로 고정되어야 한다.
     */
    function aes_encrypt (p_str in varchar2, p_keystr in varchar2 := null) return varchar2
    is
        output_string       VARCHAR2(4000);
        encrypted_raw       RAW(2000);
        key_bytes_raw       RAW (32) ;
        encryption_type     PLS_INTEGER :=
                            DBMS_CRYPTO.ENCRYPT_AES256
                            + DBMS_CRYPTO.CHAIN_CBC
                            + DBMS_CRYPTO.PAD_PKCS5;
    begin
        if (p_keystr is not null) and (lengthb(p_keystr) = 32) then
            key_bytes_raw := UTL_RAW.CAST_TO_RAW(CONVERT(p_keystr,'AL32UTF8','US7ASCII'));
        else
            key_bytes_raw := UTL_RAW.CAST_TO_RAW(CONVERT(c_aeskey,'AL32UTF8','US7ASCII'));
        end if ;
        encrypted_raw := DBMS_CRYPTO.ENCRYPT(SRC => UTL_I18N.STRING_TO_RAW(p_str, 'AL32UTF8'), TYP => encryption_type, KEY => key_bytes_raw);
        output_string := RAWTOHEX(encrypted_raw);
        return output_string;
    end aes_encrypt;
    /**
     * key_string는 32자리로 고정되어야 한다.
     */
    function aes_decrypt (p_str in varchar2, p_keystr in varchar2 := null) return varchar2
    is
        output_string       varchar2(2000);
        decrypted_raw       raw(2000);
        key_bytes_raw       raw (32);
        decryption_type     PLS_INTEGER :=
                                DBMS_CRYPTO.ENCRYPT_AES256
                                + DBMS_CRYPTO.CHAIN_CBC
                                + DBMS_CRYPTO.PAD_PKCS5;
    begin
        if (p_keystr is not null) and (lengthb(p_keystr) = 32) then
            key_bytes_raw := UTL_RAW.CAST_TO_RAW(CONVERT(p_keystr,'AL32UTF8','US7ASCII'));
        else
            key_bytes_raw := UTL_RAW.CAST_TO_RAW(CONVERT(c_aeskey,'AL32UTF8','US7ASCII'));
        end if;
        decrypted_raw := DBMS_CRYPTO.DECRYPT(SRC => HEXTORAW(p_str), TYP => decryption_type, KEY => key_bytes_raw);
        output_string := CONVERT(UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw),'US7ASCII','AL32UTF8');
        return output_string;
    end aes_decrypt;
end crypt_ase256;
3. 아래와 같이  사용
select crypt_ase256.aes_encrypt('asssss') from dual