일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 단축키
- 자바
- 페이징
- full text indexing
- 스프링
- 형변환
- 다운캐스팅
- 전체텍스트
- 다형성
- Validations
- 자바 야구게임
- 가변인자
- IBatis procedure
- 추상클래스
- 전자정부
- jquery
- angular2
- 상속
- Full text
- 전체
- 야구게임
- 로또
- Random
- while
- Login with OAuth Authentication
- 상속예제
- 25가지 효율적인 sql작성법
- 업캐스팅
- 이클립스
- Today
- Total
nalaolla
DBMS_CRYPTO를 이용한 AES256 알고리즘 암호화/복호화 본문
*************************************************************************** 암호화 ******************************************************************************/ FUNCTION ENC_AES ( input_string IN VARCHAR2 ) RETURN VARCHAR2;
/****************************************************************************** 복호화 ******************************************************************************/ FUNCTION DEC_AES ( encrypted_raw IN VARCHAR2 ) RETURN VARCHAR2;
END CRYPTO_AES256; /
|
Body Script
CREATE OR REPLACE PACKAGE BODY [유저명].CRYPTO_AES256 IS
/****************************************************************************** 암호화 ******************************************************************************/ FUNCTION ENC_AES ( input_string IN VARCHAR2 ) RETURN VARCHAR2 IS
encrypted_raw RAW (2000); -- 암호화된 RAW타입 데이터 key_bytes_raw RAW (32); -- 암호화 KEY (32RAW => 32Byte => 256bit) encryption_type PLS_INTEGER := -- 암호화 알고리즘 선언 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; BEGIN
key_bytes_raw :=UTL_I18N.STRING_TO_RAW('12345678901234567890123456789012', 'AL32UTF8'); encrypted_raw := DBMS_CRYPTO.ENCRYPT ( src => UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw );
-- 에러 방지를 위해 base64_encode로 인코딩 처리.. -- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error RETURNUTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(encrypted_raw));
END ENC_AES;
/****************************************************************************** 복호화 ******************************************************************************/ FUNCTION DEC_AES ( encrypted_raw IN VARCHAR2 ) RETURN VARCHAR2 IS
output_string VARCHAR2 (200); -- 복호화된 문자열 decrypted_raw RAW (2000); -- 복호화된 raw타입 데이터 key_bytes_raw RAW (32); -- 256bit 암호화 key encryption_type PLS_INTEGER := -- 복호화 알고리즘 선언 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; BEGIN
key_bytes_raw :=UTL_I18N.STRING_TO_RAW('12345678901234567890123456789012', 'AL32UTF8'); decrypted_raw := DBMS_CRYPTO.DECRYPT ( -- 에러 방지를 위해 base64_decode로 인코딩 처리.. -- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error src =>UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(encrypted_raw)), typ => encryption_type, key => key_bytes_raw ); output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');
RETURN output_string;
END DEC_AES;
END CRYPTO_AES256; /
|
각자 원하는 키코드(32byte) 부분을 수정하면 해당 키로만 복호화 할 수 있는 암호화 문자열이 생성됩니다.
만약 다음과 같은 에러가 발생될시 조치방법
PACKAGE BODY [유저명].CRYPTO_AES256 On line: 7 PLS-00323: 부프로그램 또는 'ENC_AES' 커서는 패키지 지정에 정의되고 패키지 본체에 나타나야합니다
|
Body Script를 긁어서 프로그램 코드를 직접제거하고, Head에 들어가는 형식으로 직접 수정 합니다.
그리고 Head생성 후 Body 생성..
Head와 Body에 문자열이든 어떤것이든 형식이 일치하지 않는다는 에러입니다.
'ORACLE' 카테고리의 다른 글
프로시져 사용한 간단 우편번호 검색기 (0) | 2016.01.07 |
---|---|
오라클 암호화/복호화 쿼리 - 유용 (0) | 2015.12.28 |
hr스키마 테스트 (0) | 2015.12.21 |
데이터 병합 (0) | 2015.12.21 |
WGS-84 방식의 좌표값을 가지는 두 좌표의 거리를 구하는 함수 (0) | 2015.12.20 |