ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ORACLE] 데이터 암호화 하기(사용자 패스워드 암호화 하기)
    2.1.데이터베이스(ORACLE)/1.ORACLE 관리 2012.10.30 17:41

     

    운영체제 : 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

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

     

     

    댓글 0

Designed by Tistory.