출처 : http://blog.naver.com/catchbug/20130048432
1. SYS계정으로 암호화 패키지를 생성할 유저에게 권한을 할당합니다.
GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO [유저명]; GRANT EXECUTE ON DBMS_CRYPTO TO [유저명]; |
2. 패키지 생성 스크립트
Head Script
CREATE OR REPLACE PACKAGE [유저명].CRYPTO_AES256 IS /****************************************************************************** 암호화 ******************************************************************************/ FUNCTION ENC_AES ( input_string IN VARCHAR2 ) RETURN VARCHAR2;
복호화 ******************************************************************************/ FUNCTION DEC_AES ( encrypted_raw IN VARCHAR2 ) RETURN VARCHAR2; END CRYPTO_AES256; / |
Body Script
CREATE OR REPLACE PACKAGE BODY [유저명].CRYPTO_AES256 IS
암호화 ******************************************************************************/ FUNCTION ENC_AES ( input_string IN VARCHAR2 ) RETURN VARCHAR2 IS
key_bytes_raw RAW (32); -- 암호화 KEY (32RAW => 32Byte => 256bit) encryption_type PLS_INTEGER := -- 암호화 알고리즘 선언 DBMS_CRYPTO.ENCRYPT_AES256 +
encrypted_raw := DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw);
-- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error RETURN UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(encrypted_raw));
복호화 ******************************************************************************/ FUNCTION DEC_AES ( encrypted_raw IN VARCHAR2 ) RETURN VARCHAR2 IS
decrypted_raw RAW (2000); -- 복호화된 raw타입 데이터 key_bytes_raw RAW (32); -- 256bit 암호화 key encryption_type PLS_INTEGER := -- 복호화 알고리즘 선언 DBMS_CRYPTO.ENCRYPT_AES256 +
key_bytes_raw := UTL_I18N.STRING_TO_RAW('12345678901234567890123456789012', 'AL32UTF8'); -- 에러 방지를 위해 base64_decode로 인코딩 처리.. -- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error typ => encryption_type, key => key_bytes_raw);
/ |
각자 원하는 키코드(32byte) 부분을 수정하면 해당 키로만 복호화 할 수 있는 암호화 문자열이 생성됩니다.
만약 다음과 같은 에러가 발생될시 조치방법
PACKAGE BODY [유저명].CRYPTO_AES256 On line: 7 PLS-00323: 부프로그램 또는 'ENC_AES' 커서는 패키지 지정에 정의되고 패키지 본체에 나타나야합니다 |
Body Script를 긁어서 프로그램 코드를 직접제거하고, Head에 들어가는 형식으로 직접 수정 합니다.
그리고 Head생성 후 Body 생성..
Head와 Body에 문자열이든 어떤것이든 형식이 일치하지 않는다는 에러입니다.
'::: DB ::: > Oracle' 카테고리의 다른 글
복구의 기초 - startup 단계를 먼저 알자 (0) | 2011.09.20 |
---|---|
오라클 날짜 포맷 체크 함수 (0) | 2011.09.15 |
DBMS_CRYPTO를 이용한 암호화/복호화 (1) | 2011.09.06 |
DBMS_OBFUSCATION_TOOLKIT 의 암호화/복호화 (0) | 2011.09.05 |
특정 유저의 컬럼을 Row 단위로 배열하기 (0) | 2011.08.31 |