오라클의 암호화와 복호화

–오라클의 암호화와 복호화
–오라클의 암호화는 DBMS_OBFUSCATION_TOOLKIT를 이용
–이 패키지에는 4개의 프로시저가 있다.
–프로시저는 VARCHAR2 타입 및 RAW 타입을 암호/복호화 지원. 다른 타입은 지원되지 않으므로 NUMBER 타입은 TO_CHAR를 이용해야 한다.
–DBMS_OBFUSCATION_TOOLKIT 패키지는 기본적으로는 사용할 수 없는 상태이다. 설치시에는 준비 되지 않은 패키지이기 때문이다. 아래 파일을 직접 실행해야 패키지가 생성되고, 준비가 된다.
D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\dbmsobtk.sql
D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\prvtobtk.plb

–SQLPLUS에서 SYS계정으로 로그인한 후 실행합니다.
SQL> @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\dbmsobtk.sql
–>패키지 생성
SQL> @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\prvtobtk.plb
–>패키지 본문 생성
–SYS: DBMS_OBFUSCATION_TOOLKIT 패키지를 사용할 수 있는 권한을 SCOTT 사용자에게 부여
GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO scott;
–SYS: DBMS_OBFUSCATION_TOOLKIT 패키지를 사용할 수 있는 권한을 모든 사용자에게 부여
GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO PUBLIC;
———————————–
–암호화 및 복호화용 패키지 작성

(사용할 곳에서 패키지 생성) 나의 경우는 scott에 했었음.
–선언
CREATE OR REPLACE PACKAGE CryptIT
IS
FUNCTION encrypt(str VARCHAR2, HASH VARCHAR2)
RETURN VARCHAR2;
FUNCTION decrypt(str VARCHAR2, HASH VARCHAR2)
RETURN VARCHAR2;
END CryptIT;

–몸체
CREATE OR REPLACE PACKAGE BODY CryptIT
IS
s VARCHAR2(2000);

FUNCTION encrypt(str VARCHAR2, HASH VARCHAR2) — 암호화
RETURN VARCHAR2
IS
p NUMBER := ((FLOOR(LENGTH(str)/8+0.9))*8);
BEGIN
DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
input_string => RPAD(str,p)
,key_string => RPAD(HASH,8,’#’)
,encrypted_string => s
);
RETURN s;
END;
FUNCTION decrypt(str VARCHAR2, HASH VARCHAR2) — 복호화
RETURN VARCHAR2
IS
BEGIN
DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
input_string => str
,key_string => RPAD(HASH,8,’#’)
,decrypted_string => s
);
RETURN TRIM(s);
END;

END CryptIT;
CREATE TABLE abc(id NUMBER, pass VARCHAR2(20));

INSERT INTO abc (id, pass) VALUES (1, CryptIT.encrypt(‘12345′,’test’));
COMMIT;

SELECT id, pass FROM abc;

Leave a Reply

Your email address will not be published. Required fields are marked *