<< Google Chrome Frame - Hidden Active-X | Home | 웹 기반의 시퀀스 다이어그램 >>

오라클 10g DBMS_CRYPTO 암호화 방법

1. 사전에 권한 부여
 - 오라클 10g DBMS_이상이어야 함(무료 패키지임)
 - grant execute on DBMS_CRYPTO to XXXX(계정);

2. 관련 패키지 소스
 CREATE OR REPLACE PACKAGE BODY XXXX.pno_crypto_pkg
IS
SQLERRMSG VARCHAR2(255);
SQLERRCDE NUMBER;

FUNCTION encrypt (input_string IN VARCHAR2 , key_data IN VARCHAR2 ,
iv_data IN VARCHAR2)
RETURN VARCHAR2
IS
encrypted_raw RAW(128);
converted_raw RAW(128);
encrypted_base64 VARCHAR2(128);
BEGIN
IF input_string IS NULL THEN
RETURN NULL;
end IF;

converted_raw := UTL_I18N.STRING_TO_RAW(input_string,
'AL32UTF8');
encrypted_raw :=
DBMS_CRYPTO.ENCRYPT(
src => converted_raw ,
typ => DBMS_CRYPTO.ENCRYPT_AES128 +
DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 ,
key => key_data ,
iv => iv_data);
encrypted_base64 :=
UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(
encrypted_raw));

RETURN encrypted_base64;

EXCEPTION
WHEN no_data_found
THEN
RETURN NULL;
WHEN others
THEN
RETURN NULL;
END encrypt;


FUNCTION decrypt (input_string IN VARCHAR2 , key_data IN VARCHAR2,
iv_data IN VARCHAR2)
RETURN VARCHAR2
IS
converted_string VARCHAR2(64);
key_data_raw RAW(128);
iv_data_raw RAW(128);
decrypted_raw VARCHAR2(64);
converted_raw VARCHAR2(128);
BEGIN
IF input_string IS NULL THEN
RETURN NULL;
end IF;

converted_raw :=
UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(input_string));
decrypted_raw :=
DBMS_CRYPTO.DECRYPT(
src => converted_raw ,
typ => DBMS_CRYPTO.ENCRYPT_AES128 +
DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
key => key_data ,
iv => iv_data);
converted_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8');

RETURN converted_string;

EXCEPTION
WHEN no_data_found
THEN
RETURN NULL;
WHEN others
THEN
RETURN NULL;

END decrypt ;

END pno_crypto_pkg;

기존의 Java, C++, C#, PHP 와도 호환이 되는 패키지입니다.

개발관련자분들은 참고하세요,  ^^



Re: 오라클 10g DBMS_CRYPTO 암호화 방법

안녕하세요.

데이타를  오라클로 옮길때 암호화 작업을 해야 해서 들어오게 되었는데요

c#에 입력한 key, lv 값을 오라클 함수에  넣으면 [키 길이가 너무 짧음] 이란 오라클 에러 메시지가 발생됩니다.

다음은 test 했던 key, lv 값입니다

key = "1234567890123456789012345678901234567890123456789012345678901234"

lv = "12345678901234567890123456789012"

확인좀 부탁합니다

 

Re: 오라클 10g DBMS_CRYPTO 암호화 방법

키를 잘못넣었네요.

32바이트로 넣으니 서로 값이 같네요~

잘쓸께요.. 

참 blob 데이타도 암호화 해서 넘기는데 문제가 없는지 알고싶습니다.

아니면 잘라서 넣어야 하는지..

그럼


Add a comment Send a TrackBack