오라클에서 특정 컬럼의 값을 암호화 또는 복호화 하는 알고리즘을 적용한 암/복호화 패키지 함수 등록 방법.
먼저, 암호화 패키지를 적용하여야 한다.
1. 암호화 패키지 추가
오라클 계정으로 접속하여
SQLPLUS로 접속하여 실행
오라클이 설치된 경로의 하위에서 아래 패키지 검색하여 실행
@$ORACLE_HOME/rdbms/admin/dbmsobtk.sql
@$ORACLE_HOME/rdbms/admin/prvtobtk.plb
# su - oracle
# sqlplus / as sysdba
SQL> @$ORACLE_HOME/rdbms/admin/dbmsobtk.sql;
SQL> @$ORACLE_HOME/rdbms/admin/prvtobtk.plb;
2. 사용자 암호화 패키지 사용 권한 추가
SYSTEM 권한으로 추가 사용자에게 권한 추가
GRANT EXECUTE ON DBMS_CRYPTO TO SCOTT;
GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO SCOTT;
3. 암호화 패키지 생성
패키지 헤더
CREATE OR REPLACE PACKAGE SCOTT.CRYPTO IS output_string VARCHAR2(4000); -- 암호화/복호화된 문자열 encrypted_raw RAW(2000); -- 암호화된 RAW타입 데이터 decrypted_raw RAW(2000); -- 복호화된 RAW타입 데이터 key_string CHAR(32) := '22080211208021320200008021080214'; -- 32 암호화 임의 키 key_bytes_raw RAW (32) := UTL_RAW.CAST_TO_RAW(CONVERT(key_string,'AL32UTF8','US7ASCII')); -- 256BIT 암호화 KEY encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; -- 암호화 알고리즘 선언 decryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; -- 복호화 알고리즘 선언 /*************************************************** * 암호화 ***************************************************/ FUNCTION ENCRYPT_AES(input_string IN VARCHAR2) RETURN VARCHAR2; /*************************************************** * 복호화 ***************************************************/ FUNCTION DECRYPT_AES(input_string IN VARCHAR2) RETURN VARCHAR2; END CRYPTO; |
패키지 BODY
CREATE OR REPLACE PACKAGE BODY SCOTT.CRYPTO IS FUNCTION ENCRYPT_AES(input_string IN VARCHAR2) RETURN VARCHAR2 IS BEGIN encrypted_raw := DBMS_CRYPTO.ENCRYPT( SRC => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8') , TYP => encryption_type , KEY => key_bytes_raw ); output_string := RAWTOHEX(encrypted_raw); RETURN output_string; -- Exception EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.ENABLE; DBMS_OUTPUT.PUT_LINE('EXCEPTION : ' || SQLERRM); DBMS_OUTPUT.DISABLE; RETURN '__error__'; END; FUNCTION DECRYPT_AES(input_string IN VARCHAR2) RETURN VARCHAR2 IS BEGIN decrypted_raw := DBMS_CRYPTO.DECRYPT( SRC => HEXTORAW(input_string) , TYP => decryption_type , KEY => key_bytes_raw ); output_string := CONVERT(UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw),'US7ASCII','AL32UTF8'); RETURN output_string; -- Exception EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.ENABLE; DBMS_OUTPUT.PUT_LINE('EXCEPTION : ' || SQLERRM); DBMS_OUTPUT.DISABLE; RETURN '__error__'; END; END CRYPTO; |
4. 암호화 테스트
암호화하여 나온 값을 복호화로 테스트
-- 암호화
SELECT CRYPTO.ENCRYPT_AES('TEST1234') FROM DUAL;
-- 복호화
SELECT CRYPTO.DECRYPT_AES('542A9634ECBB8336C73CC28A37E065D8') FROM DUAL;
'Oracle' 카테고리의 다른 글
[ORACLE DB] 오라클에서 정규표현식 Regexp 함수 사용 방법 (0) | 2021.10.23 |
---|---|
오라클 락 해제 방법 - LOCK 개체 확인 (0) | 2021.10.04 |
오라클 날짜 계산 함수 (다음주, 마지막날, 요일 구하기 등등) (0) | 2021.10.04 |
Oracle SQL Plus 실행 명령어 모음 (0) | 2020.09.26 |
Oracle DB에서 SQL 쿼리로 달력 만들기 (0) | 2020.09.25 |