2014-05-23 6 views
1
function ibp_crypto_decrypt (p_session_id in RAW) return raw is 
l_decrypted_raw  RAW(2048); 
l_encrypted_raw  RAW(2048) := p_session_id; 
l_key    RAW(128) := UTL_RAW.cast_to_raw('abcdefgh'); 
begin 
dbms_output.put_line('l_encrypted_raw '||'='||l_encrypted_raw); 
l_decrypted_raw := DBMS_CRYPTO.decrypt(src => l_encrypted_raw, 
             typ => DBMS_CRYPTO.des_cbc_pkcs5, 
             key => l_key); 
DBMS_OUTPUT.put_line('Decrypted : ' || UTL_RAW.cast_to_varchar2(l_decrypted_raw)) ;          
return l_decrypted_raw;--RAWTOHEX(UTL_RAW.cast_to_varchar2(l_decrypted_raw));           
exception when others 
then 
dbms_output.put_line(' ibp_crypto_decrypt'||'='||sqlerrm||dbms_utility.format_error_backtrace); 
end;           

ibp_crypto_decrypt = ORA-28817 : PL/SQL 함수가 오류를 반환했습니다.아래 함수를 사용하여 코드를 해독합니까? 해결하는 데 도움이 될 수 있습니까?

ORA-06512: at "SYS.DBMS_CRYPTO_FFI", line 67 
ORA-06512: at "SYS.DBMS_CRYPTO", line 44 
ORA-06512: at "IBOXV5_TEST.IBK_CRYPTO_ENCRYPTION", line 28 

답변

0

예를 들어 실제 값의 암호화로 완성했으며 예상대로 작동합니다. 값을 올바르게 암호화 했습니까?

DECLARE 
    l_input VARCHAR2(30) := utl_raw.cast_to_raw('12345678'); 
    l_encrypted_raw RAW(2048); 
    l_decrypted_raw RAW(2048); 
    l_key RAW(128) := utl_raw.cast_to_raw('abcdefgh'); 
BEGIN 
    l_encrypted_raw := dbms_crypto.encrypt(src=>l_input, typ=>dbms_crypto.des_cbc_pkcs5, key=>l_key); 
    l_decrypted_raw := dbms_crypto.decrypt(src=>l_encrypted_raw, typ=>dbms_crypto.des_cbc_pkcs5, key=>l_key); 
    dbms_output.put_line('Decrypted : ' || utl_raw.cast_to_varchar2(l_decrypted_raw)); 
END; 
/