1. 사용자에게 권한 부여 및 컬럼 바이트 확인
GRANT EXECUTE ON DBMS_CRYPTO TO NEWID;
* ALTER TABLE TB_TEMP MODIFY(REG_NO VARCHAR2(100));
2. PACKAGE 작성
CREATE OR REPLACE PACKAGE PACK_ENCRYPTION_DECRYPTION
IS
FUNCTION FUNC_ENCRYPT -- 암호화위한 함수
(V_INPUT_STRING IN VARCHAR2
,KEY_DATA IN VARCHAR2:='JAVA302$') -- KEY값은 임의로 지정해주면된다. 여기서는 JAVA302$지정
RETURN RAW; -- 데이터 타입을 알수 없도록 RAW 형으로 지정
FUNCTION FUNC_DECRYPT -- 복호화위한 함수
(V_INPUT_STRING IN VARCHAR2
,KEY_DATA IN VARCHAR2:='JAVA302$') -- 공개키이므로 KEY값은 암호화할때와 동일하게 해주었다.
RETURN VARCHAR2;
END PACK_ENCRYPTION_DECRYPTION;
3. PACKAGE 작성
CREATE OR REPLACE PACKAGE BODY PACK_ENCRYPTION_DECRYPTION
IS
FUNCTION FUNC_ENCRYPT
( V_INPUT_STRING IN VARCHAR2,
KEY_DATA IN VARCHAR2 := 'JAVA302$'
) RETURN RAW
IS
V_ORIGINAL_RAW RAW(64);
V_KEY_DATA_RAW RAW(64);
ENCRYTED_RAW RAW(64);
BEGIN
V_ORIGINAL_RAW := UTL_I18N.STRING_TO_RAW(V_INPUT_STRING, 'AL32UTF8'); -- INPUT값을 RAW 타입으로 변경
V_KEY_DATA_RAW := UTL_I18N.STRING_TO_RAW(KEY_DATA, 'AL32UTF8'); --키 또한 RAW 타입으로 변경.
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 := 'JAVA302$'
) 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(REG_NO)
5. 복호화
PACK_ENCRYPTION_DECRYPTION.FUNC_DECRYPT(REG_NO)
'DB > Oracle' 카테고리의 다른 글
분석함수 팁 (0) | 2016.08.31 |
---|---|
오라클 정규식 이용하여 문자열 자르기 (0) | 2016.03.30 |
테이블의 테이블 스페이스 일괄 변경 (0) | 2015.11.06 |
[ibatis/mybatis] RDBMS별 like문 사용법. (0) | 2013.06.11 |
오라클/ 기본 쿼리문 연습. (0) | 2013.04.12 |