728x90
이전에 작성했던 DBMS_CRYPTO 패키지를 이용하여 데이터를 암/복호화하는 패키지 바디 소스를 암호화 하는 방법이다.
DBMS_CRYPTO 패키지를 이용하여 데이터를 암/복호화
https://talking-potato-dev.tistory.com/14
[암호화] DBMS_CRYPTO 패키지를 이용하여 데이터 암/복호화
환경 : 오라클 11g * 각자의 환경에 맞게 경로를 바꿔 사용해 주시길 바랍니다. 1. CMD로 오라클 접속 (sys 계정으로 접속) C:\Users\말하는감자>sqlplus SQL*Plus: Release 11.2.0.2.0 Production on 수 11월 23 13:40:25 20
talking-potato-dev.tistory.com
1. 기존에 있던 패키지 바디를 아래와 같이 수정
DECLARE
src CLOB;
BEGIN
src :=
'
create or replace PACKAGE BODY pkg_crypto
IS
-- 에러 발생시에 error code 와 message를 받기 위한 변수 지정.
SQLERRMSG VARCHAR2(255);
SQLERRCDE NUMBER;
FUNCTION encrypt (input_string IN VARCHAR2 )
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( ''원하는 암호키(EX 12345)'' , ''AL32UTF8'');
-- DBMS_CRYPTO.ENCRYPT 로 암호화 하여 encrypted_raw 에 저장.
encrypted_raw := DBMS_CRYPTO.ENCRYPT( src => converted_raw ,
typ => DBMS_CRYPTO.DES_CBC_PKCS5 , --• DES_CBC_PKCS5: ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5 가 결합된 슈트
key => key_data_raw ,
iv => NULL);
RETURN encrypted_raw;
END encrypt;
FUNCTION decrypt (input_string IN VARCHAR2 )
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( ''원하는 암호키(EX 12345)'' , ''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;
END decrypt ;
END pkg_crypto;
';
DBMS_DDL.CREATE_WRAPPED (src);
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END ;
2. 결과
create or replace PACKAGE BODY pkg_crypto wrapped
a000000
369
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
b
61a 23b
NBzrSQ0lRU8vf753ZBRK8y9KN40wg+23Na7WfI7GAE4+I9Zs2cIt7m+cWIlhajkrS4mI3AAw
pY+vlTAIBQXyMaMEyW3Uv8W7jaq1u4Gx4VGOGzbbreKv7oHpIp2qHCIZetCnQZ4OUc9H58GY
ZcweAF19+5t854wRoGEe57YNyT3RG89V+UU7BNMhF6l82x7mqanCUdPCjm7CNmmfjjaMiyjd
9E1XHXYiKvS3KKQ+JmxA4fJcIMcniFbo694egFuXMUG4NUsNCGgihva4DwOCG70BYfBr1rnf
DtNYGgOUEyEA8vceGAX+BM58EweNtOLPBfAFVUsEpvlWbpZRBUOXu/SQxylhJkZSNNVDv9FP
dVEJYq3hE/jcroaMlwKo/OYKtIBwUad/8ekYl1qtvCsJsmAMe06+gx9V9rICEae+x2WFrYRl
xOYESE4QTX++0/zfqmaY0PfMLZqjH4MMLDcIwd1VtqTKNL/UZN71VfUEIZUO6VAQ0RkPHX1z
JD/W0nOmNwDHMugcU7w03YhDpduyMkyTmc2ncI0lT+nsdTc77ROWeaBgCg==
프로시저 또한 동일하게 소스 암호화가 가능하다
'DB > SQL' 카테고리의 다른 글
[MSSQL]사용자 정의 함수Function 만들기 (0) | 2023.04.27 |
---|---|
[MSSQL] 권한 있는 테이블 조회 (0) | 2023.04.27 |
[SQL] PK와 UNIQE INDEX 차이점 (0) | 2023.04.06 |
[ORACLE] Mybatis 쿼리 여러개 한번에 실행하기 (0) | 2023.03.30 |
[암호화] DBMS_CRYPTO 패키지를 이용하여 데이터 암/복호화 (0) | 2022.11.24 |