2. 패키지 실행하기--> 패키지 선언부 생성CREATE OR REPLACE PACKAGE CryptIT AS FUNCTION encrypt( Str VARCHAR2, hash VARCHAR2 ) RETURN VARCHAR2; FUNCTION decrypt( xCrypt VARCHAR2, hash VARCHAR2 ) RETURN VARCHAR2;END CryptIT;/ --> 패키지 본체 생성CREATE OR REPLACE PACKAGE BODY CryptIT AS crypted_string VARCHAR2(2000); FUNCTION encrypt( Str VARCHAR2, hash VARCHAR2 ) RETURN VARCHAR2 AS pieces_of_eight INTEGER := ((FLOOR(LENGTH(Str)/8 + .9)) * 8); BEGIN dbms_obfuscation_toolkit.DESEncrypt( input_string => RPAD( Str, pieces_of_eight ), key_string => RPAD(hash,8,’#’), encrypted_string => crypted_string ); RETURN crypted_string; END; FUNCTION decrypt( xCrypt VARCHAR2, hash VARCHAR2 ) RETURN VARCHAR2 AS BEGIN dbms_obfuscation_toolkit.DESDecrypt( input_string => xCrypt, key_string => RPAD(hash,8,’#’), decrypted_string => crypted_string ); RETURN trim(crypted_string); END;END CryptIT;/
3. 실행 예제1) Encrypt하여 데이터 입력-- 테스트 테이블을 생성 합니다. SQL>create table encrypt_table( id number, passwd varchar(20) ); -- 테스트 데이트럴 입력 합니다. -- CryptIT.encrypt(비밀번호, 키값)SQL>INSERT INTO encrypt_table VALUES( 1, CryptIT.encrypt(’1234’, ’storm’));1 개의 행이 만들어졌습니다. SQL>INSERT INTO encrypt_table VALUES( 2, CryptIT.encrypt(’5678’, ’oramaster’));1 개의 행이 만들어졌습니다. 2) Decrypt하여 데이터 조회 --> Decrypt하지 않으면 암호화된 데이터와 비교되서 결과값이 출력되지 않습니다.SQL> select id, passwd from encrypt_table where passwd = ’1234’; 선택된 레코드가 없습니다. --> 저장장치에 Encrypt된 값으로 저장 됩니다.SQL> col passwd format a60SQL> select id, dump(passwd) passwd from encrypt_table; ID PASSWD---------- ------------------------------------------------------------- 1 Typ=1 Len=8: 246,27,80,184,227,225,245,31 2 Typ=1 Len=8: 175,231,213,125,85,223,46,133 --> Encrypt할 때 사용한 Key로만 Decrypt할 수 있습니다. SQL>SELECT id, CryptIT.decrypt(passwd,’storm’) passwd FROM encrypt_table WHERE CryptIT.decrypt(passwd,’storm’) = ’1234’; ID PASSWD---------- ----------- 1 1234 SQL>SELECT id, CryptIT.decrypt(passwd,’oramaster’) passwd FROM encrypt_table WHERE CryptIT.decrypt(passwd,’oramaster’) = ’5678’; ID PASSWD---------- ----------- 2 5678 주의) Table에 접근 권한이 있는 다른 유저도 Key값을 알면 Decrypt할 수 있습니다. 4) 관련 ORA error number ORA error 28231 "Invalid input to Obfuscation toolkit"- input data, key값이 NULL일 경우 발생 ORA error 28232 "Invalid input size for Obfuscation toolkit"- input data가 8 bytes 배수가 아닐 경우 발생 ORA error 28233 "Double encryption not supported by DESEncrypt in Obfuscation toolkit"- encrypt data를 다시 encrypt경우 발생 관 련 자 료===========Oracle8i Supplied PL/SQL Packages Reference Release 2 (8.1.6)
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.