Oracle | DBMS_CRYPTO 암호화 패키지 추가 하기 I
페이지 정보
작성자 100K5 작성일17-02-22 15:03 조회38,601회 댓글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;
댓글목록
등록된 댓글이 없습니다.