원문 : http://blog.naver.com/catchbug/20130039354
DMBS_CRYPTO AES256으로 암호화 하기는 별도로 포스팅 되어있습니다.
http://blog.naver.com/catchbug/20130048432
1. SYS계정으로 암호화 패키지를 생성할 유저에게 권한을 할당합니다.
GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO [계정명];
GRANT EXECUTE ON DBMS_CRYPTO TO [계정명];
|
2. 권한을 할당한 유저로 접속하여 패키지 생성 Script를 실행합니다.
Header 생성 Script
CREATE OR REPLACE PACKAGE [계정명].ENCRYPTION_AES IS
/****************************************************************************** 암호화 ******************************************************************************/ FUNCTION ENC_AES ( INPUT_STRING IN VARCHAR2 ) RETURN VARCHAR2; /****************************************************************************** 암호화 끝 ******************************************************************************/
/****************************************************************************** 복호화 ******************************************************************************/ FUNCTION DEC_AES ( INPUT_STRING IN VARCHAR2 ) RETURN VARCHAR2; /****************************************************************************** 복호화 끝 ******************************************************************************/
END ENCRYPTION_AES; /
|
Body 생성 Script
CREATE OR REPLACE PACKAGE BODY [계정명].ENCRYPTION_AES IS
/****************************************************************************** 암호화 ******************************************************************************/ FUNCTION ENC_AES ( INPUT_STRING IN VARCHAR2 ) RETURN VARCHAR2 IS
V_ORIGINAL_RAW RAW(130); -- 암호화 전 데이타 V_KEY_DATA_RAW RAW(64); -- 키값 ENCRYTED_RAW RAW(320); -- 암호화 된 데이타 CONVERTED_STRING VARCHAR2(320); -- 형 변환 데이타
BEGIN
V_ORIGINAL_RAW := UTL_I18N.STRING_TO_RAW(INPUT_STRING,'AL32UTF8'); -- VARCHAR2 -> RAW 타입으로 변경 (변경 이유는 아래에..) V_KEY_DATA_RAW := UTL_I18N.STRING_TO_RAW('AKDKEKDKFKGKEKSD','AL32UTF8'); -- 키값 RAW 타입으로 변경. ENCRYTED_RAW := DBMS_CRYPTO.ENCRYPT( SRC => V_ORIGINAL_RAW, TYP =>DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC+ DBMS_CRYPTO.PAD_PKCS5, KEY => V_KEY_DATA_RAW ); CONVERTED_STRING := UTL_RAW.cast_to_varchar2(utl_encode.base64_encode(ENCRYTED_RAW) ) ;
-- 중요!!! raw 타입을 base64_encode()를 이용하여 encoding 후 varchar2타입으로 변환해야한다!! 해주지 않으면 -- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error 이러한 에러를 볼 수 있을 것이다.
RETURN CONVERTED_STRING;
END ENC_AES; /****************************************************************************** 암호화 끝 ******************************************************************************/
/****************************************************************************** 복호화 ******************************************************************************/ FUNCTION DEC_AES ( INPUT_STRING IN VARCHAR2 ) RETURN VARCHAR2 IS
V_KEY_DATA_RAW RAW(64); -- 키값 DECRYPTED_RAW RAW(320); -- 복호화 값 CONVERTED_STRING VARCHAR2(320); -- 형 변환 데이타
BEGIN
V_KEY_DATA_RAW := UTL_I18N.STRING_TO_RAW('AKDKEKDKFKGKEKSD','AL32UTF8'); DECRYPTED_RAW := DBMS_CRYPTO.DECRYPT( SRC =>utl_encode.base64_decode(utl_raw.cast_to_raw(INPUT_STRING)), -- 중요!!! varchar2 타입의 데이타를 raw 타입으로 변환 후 decoding 해야한다!!해주지 않으면 -- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error 이러한 에러를 볼 수 있을 것이다. TYP =>DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, KEY => V_KEY_DATA_RAW); CONVERTED_STRING := UTL_I18N.RAW_TO_CHAR(DECRYPTED_RAW, 'AL32UTF8'); -- RAW -> CHAR 타입으로 변환하여 RETURN
RETURN CONVERTED_STRING;
END DEC_AES; /****************************************************************************** 복호화 끝 ******************************************************************************/
END ENCRYPTION_AES; /
|
3. 테스트
SELECTENCRYPTION_AES.ENC_AES('123456789012345678901234567890123456789012345678901234567890')AA FROM DUAL;
SELECT ENCRYPTION_AES.DEC_AES('IC2hiCNRQKwb6feMvc4PxZfq3xKeb80QrRr/utxFa7Q30BdhgBBRm/ymDbsNg/qHuE9vj5ZqrZExeALTU0oqQA==') FROM DUAL;
|
'DB > Oracle' 카테고리의 다른 글
오라클 wrap -> unwrap 해주는 사이트 (0) | 2015.09.01 |
---|---|
어플리케이션에서 오라클 한글 깨질때 (0) | 2015.08.31 |
오라클 명령어 모음 (0) | 2015.07.28 |
오라클 계정생성, 비번변경, 계정삭제, 잠금풀기 (0) | 2015.07.28 |