사원들의 패스워드나 혹은 중요한 계좌번호등을 암호화하기 위해 사용할 수 있는 방법입니다.
별도의 암호서버가 없거나, 어플리케이션에서 구현하기 어려운 경우에 사용하면 좋은 방법이죠.
암호화 방법은 DES(Data Encryption Standard) 입니다. 암호를 해독하기 위해서는 암호시 사용했던 Key 를 알아야 하죠.
아래는 실제 암호화해서 보여지는 샘플입니다.
xencrypt 와 encrypt 가 약간 다르죠? 두 가지중 한가지만 사용하셔도 됩니다. 개인적으로는 xencrypt 선호!
역으로 xdecrypt 와 decrypt 를 실행하면 원문을 볼수 있습니다.
SQLWKS> select sys.crypto.encrypt("Test") from dual;
SYS.CRYPTO.ENCRYPT("TEST")
-------------------------
ㅥPE ?
1 행이 선택되었습니다
SQLWKS> select sys.crypto.xencrypt("Test") from dual;
SYS.CRYPTO.XENCRYPT("TEST")
-------------------------
26CCE98AD6AEC709
1 행이 선택되었습니다
일단 오라클 SYS 유저에서 작업을 해주고 실행권한을 public 으로 grant 해줍니다.
※ 일단 이같은 작업은 DBA 만 할 수 있죠. 어플리케이션 담당자분들은 필요 시 요청하심~
[[ 여기부터 ]]
DBMS_OBFUSCATION_TOOLKIT을 이용하기 위해서는 :
1) SYS 유저로
@$ORACLE_HOME/rdbms/admin/dbmsobtk.sql
@$ORACLE_HOME/rdbms/admin/prvtobtk.plb
################ 암호화 하는 모듈 #####################
2) 패키지 생성
CREATE OR REPLACE PACKAGE Crypto AS
FUNCTION xencrypt( Str VARCHAR2 ) RETURN VARCHAR2;
FUNCTION xdecrypt( xCrypt VARCHAR2 ) RETURN VARCHAR2;
FUNCTION encrypt( Str VARCHAR2 ) RETURN VARCHAR2;
FUNCTION decrypt( xCrypt VARCHAR2 ) RETURN VARCHAR2;
END Crypto;
/
CREATE OR REPLACE PACKAGE BODY Crypto AS
raw_input RAW(128);
key_string VARCHAR2(16):="keyvalues";
raw_key RAW(128):=UTL_RAW.CAST_TO_RAW(key_string);
encrypted_raw RAW(2048);
decrypted_raw RAW(2048);
crypted_string VARCHAR2(2000);
hash VARCHAR2(50);
FUNCTION encrypt( Str VARCHAR2 ) RETURN VARCHAR2
AS
pieces_of_eight INTEGER := ((FLOOR(LENGTHB(Str)/8 +.9))*8);
BEGIN
hash :="hashkey";
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 ) RETURN VARCHAR2
AS
BEGIN
hash :="hashkey";
dbms_obfuscation_toolkit.DESDecrypt(
input_string => xCrypt,
key_string => RPAD(hash,8,"#"),
decrypted_string => crypted_string );
RETURN trim(crypted_string);
END;
FUNCTION xencrypt( Str VARCHAR2 ) RETURN VARCHAR2
AS
BEGIN
raw_input:=UTL_RAW.CAST_TO_RAW(RPAD(Str,FLOOR((LENGTHB(Str)/8+.9))*8));
dbms_obfuscation_toolkit.DESEncrypt(input => raw_input,key=> raw_key, encrypted_data => encrypted_raw);
RETURN rawtohex(encrypted_raw);
END;
FUNCTION xdecrypt( xCrypt VARCHAR2 ) RETURN VARCHAR2
AS
BEGIN
encrypted_raw:=hextoraw(xCrypt);
dbms_obfuscation_toolkit.DESDecrypt(input => encrypted_raw,key=> raw_key, decrypted_data => decrypted_raw);
RETURN UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw);
END;
END Crypto;
/
3) grant execute on sys.crypto to public;
[출처] 오라클을 이용한 주요 데이타 암호화|작성자 클릭맨
'Oracle(DB관련)' 카테고리의 다른 글
the Toad Extension for Eclipse (0) | 2010.10.07 |
---|---|
오라클 함수(lead, lag) 이용 게시판 이전글, 다음글 (0) | 2010.09.16 |
숫자함수 (0) | 2009.11.04 |
문자함수 (0) | 2009.11.04 |
날짜함수 (0) | 2009.11.04 |