JSP

 

* 공개키 알고리즘

- 암호화와 복호화에 같은 키를 사용하여 문서를 암호화하고 복호화함

 

비밀번호 암호화를 위해 기존의 

tbl_member  테이블의  pwd 컬럼을 가변길이를  늘이도록 하자.


alter table tbl_member modify (pwd varchar2(100));

 

 

 

 1단계  

-- sysdba 계정으로 가서 권한 부여

 

cmd >

콘솔 > sqlplus / as sysdba

 

GRANT EXECUTE ON DBMS_CRYPTO TO 사용자아이디 

ex)
SQL> grant execute on dbms_crypto to macaronics;


 

 

 2단계  

암호화+복호화를 위한 패키지 선언

VARCHAR2:='macaronics@53fs&8!!fz~'

임의로 문자열을 적으면 되고 , 보호와의 키값과 같아야 한다.

CREATE OR REPLACE PACKAGE PACK_ENCRYPTION_DECRYPTION

IS

FUNCTION FUNC_ENCRYPT     -- 암호화를 위한 함수

(V_INPUT_STRING IN VARCHAR2, KEY_DATA  IN  VARCHAR2:='macaronics@53fs&8!!fz~')   

RETURN RAW;   



FUNCTION FUNC_DECRYPT   -- 복호화를 위한 함수

(V_INPUT_STRING IN VARCHAR2, KEY_DATA IN VARCHAR2:='macaronics@53fs&8!!fz~') 

RETURN VARCHAR2;    

END  PACK_ENCRYPTION_DECRYPTION;    



/

 

다음과 같이 암호화+복호화를 위한 패키지 선언  되었다.  아직 패키지와 된 것은 아니다.

 

 

 3단계  

FUNC_ENCRYPT  함수의 키값과,   FUNC_DECRYPT 함수의 키값을  2단계의 키값과 동일 시한다.

CREATE OR REPLACE PACKAGE BODY PACK_ENCRYPTION_DECRYPTION

IS



FUNCTION FUNC_ENCRYPT

( V_INPUT_STRING  IN  VARCHAR2,

  KEY_DATA          IN  VARCHAR2 := 'macaronics@53fs&8!!fz~'

) RETURN RAW

IS

V_ORIGINAL_RAW     RAW(64);

V_KEY_DATA_RAW   RAW(64);

ENCRYTED_RAW      RAW(64);

BEGIN

-- INPUT값을 RAW 타입으로 변경

V_ORIGINAL_RAW := UTL_I18N.STRING_TO_RAW(V_INPUT_STRING, 'AL32UTF8');  

--키 또한  RAW 타입으로 변경.

V_KEY_DATA_RAW := UTL_I18N.STRING_TO_RAW(KEY_DATA, 'AL32UTF8');  

         

ENCRYTED_RAW := DBMS_CRYPTO.ENCRYPT(

SRC => V_ORIGINAL_RAW,

TYP => DBMS_CRYPTO.DES_CBC_PKCS5,

KEY => V_KEY_DATA_RAW,

IV => NULL);

         

RETURN ENCRYTED_RAW;

END FUNC_ENCRYPT;

      

      

FUNCTION FUNC_DECRYPT

( V_INPUT_STRING  IN  VARCHAR2,

  KEY_DATA      IN  VARCHAR2 := 'macaronics@53fs&8!!fz~'

) RETURN VARCHAR2

IS

V_KEY_DATA_RAW  RAW(64);

DECRYPTED_RAW   RAW(64);

CONVERTED_STRING  VARCHAR2(64);

BEGIN

V_KEY_DATA_RAW := UTL_I18N.STRING_TO_RAW(KEY_DATA, 'AL32UTF8');            DECRYPTED_RAW := DBMS_CRYPTO.DECRYPT(

SRC => V_INPUT_STRING,

TYP => DBMS_CRYPTO.DES_CBC_PKCS5,

                        KEY => V_KEY_DATA_RAW,

IV => NULL);

CONVERTED_STRING :=  UTL_I18N.RAW_TO_CHAR(DECRYPTED_RAW, 'AL32UTF8');     

                RETURN CONVERTED_STRING;

END FUNC_DECRYPT;



END PACK_ENCRYPTION_DECRYPTION;

/

 

패키지 된 모습이다.

 

 

 

 

 4단계  

쿼리 적용

암호화시 

PACK_ENCRYPTION_DECRYPTION.FUNC_ENCRYPT(전달 받은 패스워드 )

 

복호화시
PACK_ENCRYPTION_DECRYPTION.FUNC_ENCRYPT(전달 받은 패스워드)

 

mybatis 적용 예

		
	<insert id="insertMember">
	<![CDATA[
	INSERT  INTO TBL_MEMBER (ID, PWD, NAME, EMAIL, ZIP_NUM, ADDRESS, PHONE,  IP) 
	VALUES(#{id}, PACK_ENCRYPTION_DECRYPTION.FUNC_ENCRYPT(#{pwd}), #{name}, 
	#{email}, #{zip_num}, #{address}, #{phone}, #{ip})
	
	]]>
	</insert>
	
	
	<!--  비밀번호 체크 --> 	
	<select id="checkIdAndPwd" resultType="int">
	<![CDATA[
		select count(*) from TBL_MEMBER where id=#{id} and pwd=PACK_ENCRYPTION_DECRYPTION.FUNC_ENCRYPT(#{pwd})
	]]>
	</select>

 

 

 

 

제작 : macaronics.net - Developer  Jun Ho Choi

소스 :  https://github.com/braverokmc79/jsp_sin

 

${request.getContextPath() } 처리를 안한 부분이 있으므로 

루트 설정( http://macaronics.net/index.php/m01/jsp/view/1352)    및 server.xml  에서 DB 컨넥션 설정은 필수 설정이다.

 

about author

PHRASE

Level 60  라이트

더부살이 환자(還子) 걱정 , 남의 일에 주제넘은 걱정을 함을 이르는 말.

댓글 ( 4)

댓글 남기기

작성