728x90
반응형
이번 포스트에서는 Oracle 데이터베이스에서 데이터를 안전하게 암호화하고, 필요할 때 이를 복호화하는 방법에 대해 알아보겠습니다. 데이터의 보안은 데이터베이스 응용프로그램에서 매우 중요합니다. Oracle 데이터베이스에서는 DBMS_CRYPTO 및 DBMS_OBFUSCATION_TOOLKIT 패키지를 사용하여 간단하게 데이터를 암호화하고 복호화할 수 있습니다.
0. system 계정에서 두 파일 실행
ORACLE_HOME\RDBMS\ADMIN\dbmsobtk.sql
ORACLE_HOME\RDBMS\ADMIN\prvtobtk.plb
1. 암호화 함수 및 패키지 생성
먼저, 데이터를 암호화하기 위한 패키지를 생성합니다.
입력값을 받아 암호화하는 `pkg_crypto` 패키지와,
DBMS_OBFUSCATION_TOOLKIT 패키지를 사용하여
암호화하는 `f_Encrypt` 함수, 복호화하는 `f_Decrypt` 함수를 정의합니다.
-- 패키지 생성
CREATE OR REPLACE PACKAGE pkg_crypto
IS
FUNCTION encrypt ( input_string IN VARCHAR2 ) RETURN RAW;
FUNCTION decrypt ( input_string IN VARCHAR2 ) RETURN VARCHAR2;
END pkg_crypto;
/
-- 패키지 본문 생성
CREATE OR REPLACE PACKAGE BODY pkg_crypto
IS
SQLERRMSG VARCHAR2(255);
SQLERRCDE NUMBER;
FUNCTION encrypt (input_string IN VARCHAR2 )
RETURN RAW
IS
key_data_raw RAW(64);
converted_raw RAW(64);
encrypted_raw RAW(64);
BEGIN
converted_raw := UTL_I18N.STRING_TO_RAW(input_string , 'AL32UTF8');
key_data_raw := UTL_I18N.STRING_TO_RAW( '12345678' , 'AL32UTF8');
encrypted_raw := DBMS_CRYPTO.ENCRYPT( src => converted_raw ,
typ => DBMS_CRYPTO.DES_CBC_PKCS5 ,
key => key_data_raw ,
iv => NULL);
RETURN encrypted_raw;
END encrypt;
FUNCTION decrypt (input_string IN VARCHAR2 )
RETURN VARCHAR2
IS
converted_string VARCHAR2(64);
key_data_raw RAW(64);
decrypted_raw VARCHAR2(64);
BEGIN
key_data_raw := UTL_I18N.STRING_TO_RAW( '12345678' , 'AL32UTF8');
decrypted_raw := DBMS_CRYPTO.DECRYPT( src => input_string ,
typ => DBMS_CRYPTO.DES_CBC_PKCS5 ,
key => key_data_raw ,
iv => NULL);
converted_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8');
RETURN converted_string;
END decrypt ;
END pkg_crypto;
/
-- 사용자 권한 부여
GRANT EXECUTE ON DBMS_CRYPTO TO SCOTT;
GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO SCOTT;
-- 사용자계정에서 암호화 함수 생성
CREATE OR REPLACE FUNCTION f_Encrypt (p_Input_str in varchar2) RETURN VARCHAR2
AS
v_Input_len number := ROUND(LENGTH(p_Input_str)/8+0.5)*8;
v_Encrypted_str varchar2(2000) := null;
v_Key varchar2(16) := 'abcdefgh12345678';
BEGIN
DBMS_OBFUSCATION_TOOLKIT.DESENcrypt(input_string => RPAD(p_Input_str,
v_Input_len),
key_string => v_Key,
encrypted_string =>v_Encrypted_str);
RETURN v_Encrypted_str;
END;
-- 사용자 계정에서 복호화 함수 생성
CREATE OR REPLACE FUNCTION f_Decrypt (p_Encrypted_str in varchar2) RETURN VARCHAR2
AS
v_Key varchar2(16) := 'abcdefgh12345678';
v_Decrypted_str varchar2(2000);
BEGIN
DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(input_string => p_Encrypted_str,
key_string => v_Key,
decrypted_string => v_Decrypted_str);
RETURN trim(v_Decrypted_str);
END;
/
2. 데이터 암호화 및 테스트
이제 위에서 정의한 함수와 패키지를 사용하여 데이터를 암호화하고 복호화할 수 있습니다.
-- 데이터 암호화 테이블 생성
CREATE TABLE ENC_TEST (ID VARCHAR2(30), PWD VARCHAR2(30));
-- 데이터 암호화 및 삽입
INSERT INTO ENC_TEST (ID, PWD) VALUES ('AAA', f_Encrypt('11223344AABB'));
INSERT INTO ENC_TEST (ID, PWD) VALUES ('BBB', f_Encrypt('QWER1232'));
COMMIT;
-- 암호화된 데이터 조회
SELECT * FROM ENC_TEST;
-- 데이터 복호화 및 조회
SELECT ID, f_Decrypt(PWD) FROM ENC_TEST;
이제 데이터베이스에 저장된 데이터는 암호화되어 안전하게 보호됩니다. 복호화가 필요한 경우에는 정의한 복호화 함수를 사용하여 데이터를 원래 형태로 복구할 수 있습니다.
728x90
반응형
'study_IT > 기타' 카테고리의 다른 글
JavaScript 변수 선언: var, let, const (1) | 2023.10.23 |
---|---|
스크롤 따라 움직이는 플로팅 사이드 menu 구현하기 (1) | 2023.10.18 |
I'mport(아임포트) 결제 API 연동하기 (0) | 2023.10.14 |
GO 언어 맛보기 (0) | 2023.10.04 |
React 이벤트 사용 및 bind 함수 (0) | 2023.09.28 |