Di seguito un paio di funzioni per criptare e decriptare un testo.
Gli algoritmi utilizzati sono :
A =DES3_CBC_PKCS5 D =ENCRYPT_AES256 +CHAIN_CBC +PAD_PKCS5;
Di seguito le funzioni:
--------------------------------------------------------------------------------
--- funzione per cifrare un testo
--- ALGORITMO =
--- A =DES3_CBC_PKCS5
--- D =ENCRYPT_AES256 +CHAIN_CBC +PAD_PKCS5;
--- ES: select pkg_gest_plsql_odi.cifra('Questo è un testo molto lungo da cifrare, contiene anche ritorni a capo etc...', 'MIACHIAVE012345678901234','D') cifrato from dual;
---------------------------------------------------------------------------------
function CIFRA(in_str in VARCHAR2,
chiave in varchar2,
Algoritmo in char)
return RAW is
raw_da_cifrare RAW(2048) := UTL_RAW.CAST_TO_RAW(CONVERT(in_str,'AL32UTF8','WE8MSWIN1252'));
raw_chiave RAW(128) := UTL_RAW.CAST_TO_RAW(CONVERT(chiave,'AL32UTF8','WE8MSWIN1252'));
alg PLS_INTEGER;
v_err varchar2(4000):=null;
BEGIN
if Algoritmo = 'D' then
alg := sys.DBMS_CRYPTO.DES3_CBC_PKCS5;
elsif Algoritmo = 'A' then
alg := sys.DBMS_CRYPTO.ENCRYPT_AES256 +
sys.DBMS_CRYPTO.CHAIN_CBC +
sys.DBMS_CRYPTO.PAD_PKCS5;
else RAISE_APPLICATION_ERROR(-20001,'Algoritmo non previsto, scegliere D o A!');
end if;
return dbms_crypto.Encrypt(raw_da_cifrare, alg, raw_chiave);
EXCEPTION
WHEN OTHERS THEN
V_ERR:='Errore => '||SQLERRM;
RAISE_APPLICATION_ERROR(-20002,V_ERR);
END CIFRA;
--------------------------------------------------------------------------------
--- funzione per decifrare un testo
--- ALGORITMO =
--- A =DES3_CBC_PKCS5
--- D =ENCRYPT_AES256 +CHAIN_CBC +PAD_PKCS5;
-- ES: select pkg_gest_plsql_odi.decifra('DC84F4C1CA98FC27208C3A5013F0A88720DCCE5E5C1E250ADD38352404F3CB73E6C4A97DE64E999997B43F5531EAE824D6A2EA7AC5EE78BF5DBC3CCB86CC131B89CBADD7295D71DBE57B7CDC1DFE3787', 'MIACHIAVE012345678901234','D') from dual;
function DECIFRA(in_raw in RAW, chiave in varchar2, Algoritmo in char)
return VARCHAR2 is
raw_chiave RAW(128) := UTL_RAW.CAST_TO_RAW(CONVERT(chiave,'AL32UTF8','WE8MSWIN1252'));
raw_decifrata RAW(2048);
alg PLS_INTEGER;
v_err varchar2(4000):=null;
BEGIN
if Algoritmo = 'D' then
alg := DBMS_CRYPTO.DES3_CBC_PKCS5;
elsif Algoritmo = 'A' then
alg := DBMS_CRYPTO.ENCRYPT_AES256 +
DBMS_CRYPTO.CHAIN_CBC +
DBMS_CRYPTO.PAD_PKCS5;
else
RAISE_APPLICATION_ERROR(-20001,
'Algoritmo non previsto, scegliere D o A!');
end if;
raw_decifrata := dbms_crypto.Decrypt(hextoraw(in_raw), alg, raw_chiave);
return CONVERT(UTL_RAW.CAST_TO_VARCHAR2(raw_decifrata),'WE8MSWIN1252','AL32UTF8');
EXCEPTION
WHEN OTHERS THEN
V_ERR:='Errore => '||SQLERRM;
RAISE_APPLICATION_ERROR(-20002,V_ERR);
END DECIFRA;
--------------------------------------------------------------------------------
Occorrono per funzionare logicamente le grant sul package DBMS_CRYPTO di sys.
Nessun commento:
Posta un commento