'Decrypt'에 해당되는 글 1건

  1. 2014.01.28 오라클 aes256 암호화

오라클 aes256 암호화

sql 2014. 1. 28. 17:37

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


'sql' 카테고리의 다른 글

오라클 병렬 처리 힌트  (0) 2014.02.12
oracle instr() 함수  (0) 2014.02.12
오라클 DB 전체 테이블 컬럼 조회..  (0) 2014.01.23
게시판 내용, 카운트 한번에 가져오는 SQL  (0) 2014.01.23
오라클 CLOB 컬럼 검색 방법  (0) 2014.01.23
Posted by 무세1
,