티스토리 뷰
CREATE OR REPLACE PACKAGE DSTM_3DES
IS
/*******************************************************************************
PURPOSE : 평문 문자열을 암호화(Encryption)하는 Function
특기사항 : Oracle 에서 제공하는 3DES(Triple DES) 암호화 알고리즘 Package 사용
/******************************************************************************/
FUNCTION f_get_Enc_3DES_val
(
p_source_plain_text VARCHAR2, -- 평문 입력 문자열
p_enc_key_str VARCHAR2 -- 암호화 키
)
RETURN VARCHAR2;
/*******************************************************************************
PURPOSE : 암호화된 문자열을 평문으로 복호화(Decryption)하는 Function
특기사항 : Oracle 에서 제공하는 3DES(Triple DES) 복호화 알고리즘 Package 사용
/******************************************************************************/
FUNCTION f_get_Dec_3DES_val
(
p_source_plain_text VARCHAR2, -- 암호화된 입력 문자열
p_dec_key_str VARCHAR2 -- 복호화 키
)
RETURN VARCHAR2;
FUNCTION TestP
RETURN VARCHAR2;
END; -- Package spec
/
CREATE OR REPLACE PACKAGE BODY DSTM_3DES
IS
/*******************************************************************************
PURPOSE : 평문 문자열을 암호화(Encryption)하는 Function
특기사항 : Oracle 에서 제공하는 3DES(Triple DES) 암호화 알고리즘 Package 사용
/******************************************************************************/
FUNCTION f_get_Enc_3DES_val
(
p_source_plain_text IN VARCHAR2, -- 평문 입력 문자열
p_enc_key_str IN VARCHAR2 -- 암호화 키
)
RETURN VARCHAR2
IS
v_source_plain_txt_b64 VARCHAR2(4000); -- BASE64 로 인코딩된 문자열
v_crypt_input_length NUMBER; -- 암호화하기 전의 문자열 크기
v_crypt_input_div NUMBER; /* DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt Function 의
입력 문자열(input_string) 크기가 8바이트 한정이므로
8바이트 단위로 나눈 문자열의 Substring 반복 처리 횟수 값 */
v_crypt_input_mod NUMBER; -- 8바이트 단위로 나누고 남은 나머지 값
v_crypt_enc_cnt BINARY_INTEGER Default 0; /* 8바이트 단위로 암호화 처리시
반복처리 비교 값 */
v_input_string_source VARCHAR2(4000); /* 암호화를 위해 BASE64 로 인코딩된 문자열 크기와
BASE64 로 인코딩된 문자열 합친 문자열
(입력문자열크기+'.'+입력문자열)*/
v_input_string_tmp VARCHAR2(8); -- 8바이트 단위 임시 문자열
v_enc_str_tmp VARCHAR2(4000); -- 암호화된 임시 문자열
v_enc_str_tmp_raw RAW(4000); -- RAW 타입으로 변환된 임시 문자열
v_ret_enc_str_raw RAW(4000); -- RAW 터압으로 변환된 리턴될 암호화 문자열
BEGIN
v_source_plain_txt_b64 := DBMS_RANDOM.string('p',3) || p_source_plain_text;
--v_source_plain_txt_b64 := p_source_plain_text;
-- v_source_plain_txt_b64 := UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_source_plain_txt_b64)));
v_source_plain_txt_b64 := UTL_RAW.cast_to_raw(v_source_plain_txt_b64);
v_source_plain_txt_b64 := UTL_ENCODE.base64_encode(v_source_plain_txt_b64);
v_source_plain_txt_b64 := UTL_RAW.cast_to_varchar2(v_source_plain_txt_b64);
v_crypt_input_length := LENGTH(v_source_plain_txt_b64)+1;
v_input_string_source := v_crypt_input_length ||'.' || v_source_plain_txt_b64;
v_crypt_input_div := TRUNC((v_crypt_input_length+1)/8);
v_crypt_input_mod := MOD((v_crypt_input_length+1), 8);
FOR v_crypt_enc_cnt IN 1..(v_crypt_input_div+1) LOOP
v_input_string_tmp := RPAD(SUBSTR(v_input_string_source, (v_crypt_enc_cnt-1)*8+1, 8),8,' ');
v_enc_str_tmp := DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt( input_string => v_input_string_tmp
, key_string => p_enc_key_str);
v_enc_str_tmp_raw := UTL_RAW.cast_to_raw(v_enc_str_tmp);
v_ret_enc_str_raw := v_ret_enc_str_raw || v_enc_str_tmp_raw;
END LOOP;
RETURN v_ret_enc_str_raw;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END f_get_Enc_3DES_val;
/*******************************************************************************
PURPOSE : 암호화된 문자열을 평문으로 복호화(Decryption)하는 Function
특기사항 : Oracle 에서 제공하는 3DES(Triple DES) 복호화 알고리즘 Package 사용
/******************************************************************************/
FUNCTION f_get_Dec_3DES_val
(
p_source_plain_text IN VARCHAR2, -- 암호화된 입력 문자열
p_dec_key_str IN VARCHAR2 -- 복호화 키
)
RETURN VARCHAR2
IS
v_crypt_input_length NUMBER; -- 복호화하기 전의 문자열 크기
v_crypt_input_div NUMBER; /* DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt Function 의
입력 문자열(input_string) 크기가 8바이트 한정이므로
8바이트 단위로 나눈 문자열 Substring 반복 처리 횟수 값 */
v_crypt_dec_cnt BINARY_INTEGER Default 0; /* 8바이트 단위로 복호화 처리시
반복처리 비교 값 */
v_input_string_source VARCHAR2(4000); -- 복호화 처리를 위한 암호화된 입력 문자열
v_input_string_tmp VARCHAR2(4000); -- Varchar2 타입으로 변환된 임시 문자열
v_dec_str_tmp VARCHAR2(4000); -- 복호화된 임시 문자열
v_crypt_str_tmp VARCHAR2(8); -- 8바이트 단위 임시 문자열
v_dec_str VARCHAR2(4000); -- 복호화된 문자열
v_dec_str_length NUMBER Default 0; -- 복호화할 문자열의 크기
v_dec_str_txt_b64 VARCHAR2(4000); -- BASE64 디코딩 문자열
v_ret_dec_str VARCHAR2(4000); -- 리턴될 복호화 문자열
BEGIN
v_input_string_source := p_source_plain_text;
v_crypt_input_length := LENGTH(p_source_plain_text);
v_crypt_input_div := TRUNC((v_crypt_input_length)/(8*2));
FOR v_crypt_dec_cnt IN 1..v_crypt_input_div LOOP
v_input_string_tmp := SUBSTR(v_input_string_source, (v_crypt_dec_cnt-1)*(8*2)+1, 8*2);
v_crypt_str_tmp := UTL_RAW.cast_to_varchar2(v_input_string_tmp);
v_dec_str_tmp := DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt( input_string => v_crypt_str_tmp
, key_string => p_dec_key_str);
v_dec_str := v_dec_str || v_dec_str_tmp;
END LOOP;
v_dec_str_length := TO_NUMBER(SUBSTR(v_dec_str, 0, TO_NUMBER(INSTR(v_dec_str, '.', 1)) - 1 ));
v_dec_str_txt_b64 := SUBSTR( RTRIM(v_dec_str)
, TO_NUMBER(INSTR(v_dec_str, '.', 1)) + 1, v_dec_str_length);
-- v_ret_dec_str := UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw(v_dec_str_txt_b64)));
v_ret_dec_str := UTL_RAW.cast_to_raw(v_dec_str_txt_b64);
v_ret_dec_str := UTL_ENCODE.base64_decode(v_ret_dec_str);
v_ret_dec_str := UTL_RAW.cast_to_varchar2(v_ret_dec_str);
v_ret_dec_str := SUBSTR(v_ret_dec_str, 4);
RETURN v_ret_dec_str;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END f_get_Dec_3DES_val;
FUNCTION TestP
RETURN VARCHAR2
IS
l_var VARCHAR2(4000);
BEGIN
l_var := f_get_Enc_3DES_val('PORTAL','2DAE49B9205DC3E7');
-- htp.p(l_var);
-- htp.br;
RETURN f_get_Dec_3DES_val(l_var,'2DAE49B9205DC3E7');
EXCEPTION
WHEN OTHERS THEN
htp.p(SQLERRM);
END TestP;
END;
/
- Total
- Today
- Yesterday
- 금연
- 인공지능
- oracle
- 흡연
- 생명과학
- java
- 부작용
- 믹스커피
- 냄새
- 과학
- 금연일기
- 단백질
- 챔픽스
- 통신
- 오라클
- 윈도우10
- 설탕
- 유전자
- 의료
- 100일
- 지진
- 보건소
- DNA
- 보건
- 다이어트
- 상식
- 챔픽스 후기
- 챔픽스 후기 금연
- 뇌
- 금단증상
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |