본문 바로가기
→ 데이터베이스/ORACLE 관리

[ORACLE] 데이터 암호화 하기(사용자 패스워드 암호화 하기)

by 벅스쭌 2012. 10. 30.
반응형

 

운영체제 : Windows7 64-bit

프로그램 및 버전 : Oracle11g R2

 

※ 주의사항

 항상 연습을 먼저하고 실전으로...

 

1. 작업개요

 DB를 구축하다보면 사용자 등록을 해야 할 경우도 있고... 사용자 등록을 한다면 사용자에 대한 주민등록번호 및 비밀번호와 같은 데이터도 넣어야 합니다.

이런 데이터는 암호화를 해서 넣어야 합니다.

 

* DES(Data Encryption Standard) 암호화 방법을 사용할 계획 입니다. 이 암호화 방식은 오라클 내에 포함된 보안기능으로 DBMS_OBFUSCATION_TOOLKIT을 사용하여 중요 데이터를 암호화, 복호화 합니다.

자세한 내용은 검색^^

 

2. 작업내용

1) 커멘드 창을 띄워(Windows Key + R(실행) -> CMD입력 후 엔터) 관리자 계정으로 로그인 한다. 주의해야 할 점은

오라클 홈의 RDBMS\ADMIN 경로로 이동하여 접속하여야 한다.

 C:\Users\AHN> cd 오라클홈경로\11.2.0\db_1\rdbms\admin 엔터키

 C:\오라클홈경로\11.2.0\db_1\rdbms\admin>sqlplus "/as sysdba" 엔터키

 ...

 다음에 접속됨:

 Oracle ... ... ...

 SQL>

 

2) dbmsobtk.sql, prvtobtk.plb실행

 SQL>@dbmsobtk.sql 엔터

 ...

 ...

 ...

 SQL>@prvtobtk.plb 엔터

 ...

 ...

 ...

 

3) DBMS_OBFUSCATION_TOOLKIT을 public으로 변경

 SQL>grant execute on dbms_obfuscation_toolkit to public;

 

4) 암호화 복호화에 필요한 패키지 생성

* 패키지는 실제 사용자 계정으로 로그인하여 패키지를 만들어야 한다.

 SQL>
CREATE OR REPLACE PACKAGE CryptString AS
FUNCTION encrypt(Str VARCHAR2, hash VARCHAR2) RETURN VARCHAR2;
FUNCTION decrypt(xCrypt VARCHAR2, hash VARCHAR2) RETURN VARCHAR2;
END CryptString;
/

 

 SQL>

CREATE OR REPLACE PACKAGE BODY CryptString 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,16,'#'),
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,16,'#'), decrypted_string => crypted_string);
RETURN trim(crypted_string);
END;

END CryptString;
/

 

5) 시험해보기(데이터 입력)

* 사용자ID, 사용자이름, 비밀번호가 들어가는 테이블(userinfo) 생성을 해둔다.

 SQL>insert into userinfo(userid, username, pw) values('test1','ahn', CryptString.encrypt('1234','key'));

* 여기에서 1234가 사용자가 입력한 비밀번호 이고, key는 암호화 할때 사용하는 key이다. 나중에 복호화 할 때

key를 알아야 사용자가 입력한 비밀번호를 확인할 수 있다.

 

5) 시험해보기(데이터 조회)

* 사용자ID, 사용자이름, 비밀번호가 들어가는 테이블(userinfo) 생성을 해둔다.

 SQL>select userid, CryptString.decrypt(pw, 'key') pw from userinfo where CryptString.decrypt(pw, 'key') = '1234';

 

3. 작업결과

 자세한 캡쳐는 나중에...

 

※ 참고 사이트

 참고 : www.happytomorrow.net

 위 사이트를 참고 하였습니다.

 

 

반응형