Пакет DBMS_CRYPTO появился в Oracle 10g и пришел на смену пакету DBMS_OBFUSCATION_TOOLKIT доступному в версиях Oracle 8i и 9i. Новый пакет проще в использовании и содержит новые криптографические алгоритмы:
- Криптографические алгоритмы - DES, 3DES, AES, RC4, 3DES_2KEY
- Дополнительные формы - PKCS5, zeroes
- Режимы сцепления шифрованных блоков - CBC, CFB, ECB, OFB
- Криптографические алгоритмы хэширования - MD5, SHA-1, MD4
- Алгоритмы хеширования (MAC) - HMAC_MD5, HMAC_SH1
- Криптографический генератор псевдослучайных чисел - RAW, NUMBER, BINARY_INTEGER
- Типы данных - RAW, CLOB, BLOB
При установке, пакет размещается в схеме SYS, и при необходимости, другим пользователям дается право использования.
Простой пример использования пакета:
SET SERVEROUTPUT ON
DECLARE
l_name VARCHAR2(20) := 'http://all-oracle.ru';
l_ccn_raw RAW(128) := UTL_RAW.cast_to_raw(l_name);
l_key RAW(128) := UTL_RAW.cast_to_raw('abcdefgh');
l_encrypted_raw RAW(2048);
l_decrypted_raw RAW(2048);
BEGIN
DBMS_OUTPUT.put_line('Original : ' // l_name);
l_encrypted_raw := DBMS_CRYPTO.encrypt(src => l_ccn_raw,
typ => DBMS_CRYPTO.des_cbc_pkcs5,
key => l_key);
DBMS_OUTPUT.put_line('Encrypted : ' // RAWTOHEX(UTL_RAW.cast_to_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));
END;
/
Результат работы вышеприведенного примера:
Original : http://all-oracle.ru
Encrypted : 423837344332413842393943454130383242383431354138303943463533413631353131343236314441454136333532
Decrypted : http://all-oracle.ru
PL/SQL procedure successfully completed