DBMS_CRYPTO 암호화 패키지 추가 하기 I > 데이터베이스

본문 바로가기
사이트 내 전체검색


회원로그인

데이터베이스

Oracle | DBMS_CRYPTO 암호화 패키지 추가 하기 I

페이지 정보

작성자 100K5 작성일17-02-22 15:03 조회38,174회 댓글0건

본문

-- Oracle SQL Developer 에 사용자 계정으로 로그인 하여 패키지 생성을 한다.

-- 1. package Header 생성 Script
CREATE OR REPLACE PACKAGE crypto
IS
    FUNCTION enc (
        input_string IN  VARCHAR2 ,
        key_data  IN VARCHAR2 := '12345678'
    ) RETURN RAW;
   
    FUNCTION dec (
        input_string IN  VARCHAR2 ,
        key_data            IN VARCHAR2 := '12345678'
    ) RETURN VARCHAR2;

END crypto;


-- 2. package Body 생성 Script
CREATE OR REPLACE PACKAGE BODY crypto
IS
    -- 에러 발생시에 error code 와 message 를 받기 위한 변수 지정.
    SQLERRMSG VARCHAR2(255);
    SQLERRCDE NUMBER;

    -- 암호화 함수 선언 key_data 는 입력하지 않을 시에 default 로 12345678 로 지정됨.
    FUNCTION enc (input_string IN VARCHAR2 , key_data IN VARCHAR2 := '12345678')
     RETURN RAW
    IS
   
        key_data_raw  RAW(4000);
        converted_raw  RAW(4000);
        encrypted_raw  RAW(4000);

    BEGIN

 -- 들어온 data 와 암호키를 각각 RAW 로 변환한다.
        converted_raw := UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8');
        key_data_raw := UTL_I18N.STRING_TO_RAW(key_data, 'AL32UTF8');

 -- DBMS_CRYPTO.ENCRYPT 로 암호화 하여 encrypted_raw 에 저장.
        encrypted_raw := DBMS_CRYPTO.ENCRYPT(
                 src => converted_raw ,
                 -- typ 부분만 변경하면 원하는 알고리즘을 사용할 수 있다.
                 --단, key value data 가 다 다르니 확인해야 한다.
                 typ => DBMS_CRYPTO.DES_CBC_PKCS5 ,
                 key => key_data_raw ,
                 iv =>  NULL);       
        RETURN encrypted_raw;
   
    EXCEPTION
       WHEN OTHERS THEN
       RETURN input_string;
    END enc;

    FUNCTION dec (input_string IN VARCHAR2 , key_data IN VARCHAR2 := '12345678')
     RETURN VARCHAR2
    IS
        converted_string  VARCHAR2(4000);
        key_data_raw  RAW(4000);
        decrypted_raw  VARCHAR2(4000);

    BEGIN

        key_data_raw     := UTL_I18N.STRING_TO_RAW(key_data, 'AL32UTF8');
        decrypted_raw := DBMS_CRYPTO.DECRYPT(
                 src => input_string ,
                 typ => DBMS_CRYPTO.DES_CBC_PKCS5 ,
                 key => key_data_raw ,
                 iv =>  NULL);

        -- DBMS_CRYPTO.DECRYPT 수행 결과 나온 복호화된 raw data 를 varchar2 로 변환하면 끝!
        converted_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8');

        RETURN converted_string;
    
    EXCEPTION
       WHEN OTHERS THEN
       RETURN input_string;
    END dec ;

END crypto;
 

댓글목록

등록된 댓글이 없습니다.


사이트소개 개인정보취급방침 서비스이용약관 Copyright © kkujunhee.net All rights reserved.
상단으로

개인정보관리책임자 : 관리자

모바일 버전으로 보기