Oracle veritabanı versiyonlarından 10gR1 ile birlikte gelmekte olan ve temen işi adındanda anlaşılacağı gibi şifreleme olan bir pakettir.Bu makalemizde de bu pakedin içeriği ve kullanım örneklerini sizinle paylaşacağım.
DBMS_CRYPTO paketi içerisinde
ENCRYPT, DECRYPT, HASH, MAC, RANDOMBYTES, RANDOMINTEGER, RANDOMNUMBER
olmak üzere yedi tane fonksiyon bulunur.
ENCRYPT : Bu fonksiyon verilen bir datayı şifrelemek için kullanılır.Şifreleme işlemi sırasında verilen datanın RAW formatına çevrilerek verilmesi gerektiğinide unutmamak gerekir.
dbms_crypto.encrypt (
src IN RAW,
typ IN PLS_INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL ) RETURN RAW;
SRC => Şifrelenmek istenen değerin raw formatına çevrilmiş hali.( örneğin UTL_I18N.STRING_TO_RAW fonksiyonu kullanılabilir)
TYP=> dbms_crypto pakedi içindeki sabit değerlerin kullanımıyla verilebilecek ve şifreleme modu olarak kullanılacak parametredir.(Algoritma sabitleri (*) )
KEY=> Şifreleme esnasında kullanılacak anahtar kelimenin RAW formatına çevrilmiş hali.
IV=> Opsiyonel olarak verilebilecek ikinci bir şifreleme modudur.
Örnek :
Declare
v_deger raw(128):=utl_raw.cast_to_raw(‘ORACLE’);
v_sifre_tipi pls_integer;
v_anahtar raw(128):= utl_raw.cast_to_raw(‘Anahtarkelime’);
v_result raw(128);
Begin
v_sifre_tipi:=dbms_crypto.des_cbc_pkcs5;
v_result:=dbms_crypto.encrypt(v_deger,v_sifre_tipi,v_anahtar);
Dbms_output.put_line(v_result);
End;
/
DECRYPT : Buı fonksiyon şifrelenmiş olarak tutulan dataları tekrar eski okunabilir formatına çevrilmek için kullanılır.Encript fonksiyonundaki parametrelerle aynı parametrelere sahiptir.
SRC => Şifrelenmiş değerin raw formatına çevrilmiş hali.( örneğin UTL_I18N.STRING_TO_RAW fonksiyonu kullanılabilir)
TYP=> dbms_crypto pakedi içindeki sabit değerlerin kullanımıyla verilebilecek ve şifreleme modu olarak kullanılacak parametredir.(Algoritma sabitleri (*) )
KEY=> Şifreleme esnasında kullanılan anahtar kelimenin RAW formatına çevrilmiş hali.
IV=> Opsiyonel olarak verilebilecek ikinci bir şifreleme modudur.
Note : BLOB ve CLOB alanlar için bu iki fonksiyonun prosedür tipleride bulunur aralarında tek bir parametre farkı vardır. DST => Bu in out bir parametre olup geri dönülecek olan değerdir.
Örnek :
Declare
v_deger raw(128):=’B065E3DB5B81A604′;
v_sifre_tipi pls_integer;
v_anahtar raw(128):= utl_raw.cast_to_raw(‘Anahtarkelime’);
v_result raw(128);
Begin
v_sifre_tipi:=dbms_crypto.des_cbc_pkcs5;
v_result:=dbms_crypto.decrypt(v_deger,v_sifre_tipi,v_anahtar);
Dbms_output.put_line(utl_raw.cast_to_varchar2(v_result));
End;
/
(*) Aşağıdaki şifreleme metodlar kullanılabilir
İsim | Veri tipi | Sayı değeri |
Block Cipher Algorithms | ||
ENCRYPT_DES (56 bit) | PLS_INTEGER | 1; — 0×0001 |
ENCRYPT_3DES_2KEY (128 bit) | PLS_INTEGER | 2; — 0×0002 |
ENCRYPT_3DES | PLS_INTEGER | 3; — 0×0003 |
ENCRYPT_AES | PLS_INTEGER | 4; — 0×0004 |
ENCRYPT_PBE_MD5DES | PLS_INTEGER | 5; — 0×0005 |
ENCRYPT_AES128 (128 bit) | PLS_INTEGER | 6; — 0×0006 |
ENCRYPT_AES192 (192 bit) | PLS_INTEGER | 7; — 0×0007 |
ENCRYPT_AES256 (256 bit) | PLS_INTEGER | 8; — 0×0008 |
ENCRYPT_RC4 (Stream Cipher) | PLS_INTEGER | 129; — 0×0081 |
Block Cipher Chaining Modifiers | ||
CHAIN_CBC (Cipher Block Chaining) | PLS_INTEGER | 256; — 0×0100 |
CHAIN_CFB (Cipher Feedback) | PLS_INTEGER | 512; — 0×0200 |
CHAIN_ECB (Electronic cookbook) | PLS_INTEGER | 768; — 0×0300 |
CHAIN_OFB (Output Feedback) | PLS_INTEGER | 1024; — 0×0400 |
Block Cipher Padding Modifiers | ||
PAD_PKCS5 (Complies with PKCS #5) | PLS_INTEGER | 4096; — 0×1000 |
PAD_NONE (No padding) | PLS_INTEGER | 8192; — 0×2000 |
PAD_ZERO (Pad with zeros) | PLS_INTEGER | 12288; — 0×3000 |
PAD_ORCL | PLS_INTEGER | 16384; — 0×4000 |
Block Ciphers Suites | ||
DES3_CBC_PKCS5 | PLS_INTEGER | ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5; |
DES3_CBC_PKCS5 | PLS_INTEGER | ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5; |
AES_CBC_PKCS5 | PLS_INTEGER | ENCRYPT_AES + CHAIN_CBC + PAD_PKCS5; |
Parametreye değer olarak gönderilebilir.