Başlangıç > Database, Oracle, PL/SQL > pl/sql ile crypto işlemi yapmak

pl/sql ile crypto işlemi yapmak


Merhaba
Geliştirdiğimiz ya da üzerinde düzenleme yaptığımız uygulamalar içinde ihtiyacımız olduğunda “crypto” işlemi yaparız. Bu işlem bazen şifre saklama ,bazen bir metni gizleme ,çoğu zaman için ise güvenlik sebebi ile kullanılır.PL/Sql ortamında crypto işlemi yapabilmek için birden farklı yöntemler mevcuttur. Örneğin md5,base64 gibi. Hatırlarsanız base64 ile encode ve decode işlemini size anlatmıştım. Şimdi sistemde var olan bu bu örnek crypto işlemleri yerine kendimiz bir crypto işlemi yapabiliriz.
Kendi crypto sistemimizi yapmak için ileri derecede matematik ve algoritma bilmemize gerek yok. Çok üst seviye ve çözülmesi zor olan bir güvenliğe sahip crypto işlemi yapmayacağız için bu basit ve anlaşılır olan mantığı istediğiniz zaman ve kendinize uyarlayıp kullanabilirsiniz.
Şimdi isterseniz istediğimiz metni ya da herhangi bir sayısal ifadeyi kendi hazırladığımız crypto sistemi ile şifreleyelim.
Ben bu işlem için bir package hazırladım ve package içinde istediğimiz metni ya da sayısal ifadeyi kendi oluşturduğumuz crypto sistemi ile şifrelemek ve şifreli içeriği çözmek için fonksiyonlar mevcut.
Öncelikle package spec kısmını hazırlayalım.

CREATE OR REPLACE PACKAGE smt.plsql_crypto IS

  -- Author  : CELIKBICAK
  -- Created : 01.01.2012 14:54:44
  -- Purpose : Kendi crypto işlemimiz ile veri şifrelemek ve şifreli veriyi çözmek
  FUNCTION sifrele(metin VARCHAR2, anahtar VARCHAR2) RETURN VARCHAR2;
  FUNCTION coz(metin VARCHAR2, anahtar VARCHAR2) RETURN VARCHAR2;

END plsql_crypto;

Spec kısmı hazır olduğuna göre şimdi package body kısmını hazırlayalım.

CREATE OR REPLACE PACKAGE BODY smt.plsql_crypto IS

  FUNCTION sifrele(metin VARCHAR2, anahtar VARCHAR2) RETURN VARCHAR2 IS
    crypto_str    VARCHAR2(4000);
    temp_str      VARCHAR2(30);
    crypto_length NUMBER;
  BEGIN
    crypto_length := length(anahtar);
    FOR i IN 1 .. length(metin) LOOP
      temp_str   := substr(metin, i, 1);
      crypto_str := crypto_str || chr(ascii(temp_str) - crypto_length);
    END LOOP;
    RETURN(crypto_str);
  END sifrele;
  /**-----------------------------------------------------------------------------------**/
  FUNCTION coz(metin VARCHAR2, anahtar VARCHAR2) RETURN VARCHAR2 IS
    crypto_str    VARCHAR2(4000);
    temp_str      VARCHAR2(30);
    crypto_length NUMBER;
  BEGIN
    crypto_length := length(anahtar);
    FOR i IN 1 .. length(metin) LOOP
      temp_str   := substr(metin, i, 1);
      crypto_str := crypto_str || chr(ascii(temp_str) + crypto_length);
    END LOOP;
    RETURN(crypto_str);
  END coz;

BEGIN
  NULL;
END plsql_crypto;

Artık package hazır olduğuna göre istediğimiz metni ya da sayısal ifadeyi şifreleyip, çözebiliriz.
Örnek olarak aşağıdaki şekilde bir kullanım yapabiliriz.

DECLARE
  str           VARCHAR2(4000);
  sifreli_metin VARCHAR2(4000);
  cozulen_metin VARCHAR2(4000);
  anahtar       VARCHAR2(100);
BEGIN
  dbms_output.put_line('');
  dbms_output.put_line('---------------------Sayısal olmayan verilen şifrelenmesi ve çözülmesi---------------------' || chr(13));
  str           := 'A Place In The World Of Software , pl/sql ile crypto işlemi yapmak';
  anahtar       := 'crypto';
  sifreli_metin := smt.plsql_crypto.sifrele(str, anahtar);
  dbms_output.put_line('Şifrelenecek Metin:=' || str);
  dbms_output.put_line('Şifrelenmiş Hali:=' || sifreli_metin);
  dbms_output.put_line(chr(13) || '<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>' || chr(13));
  cozulen_metin := smt.plsql_crypto.coz(sifreli_metin, anahtar);
  dbms_output.put_line('Çözülecek Metin:=' || sifreli_metin);
  dbms_output.put_line('Çözülmüş Metin:=' || cozulen_metin);

  dbms_output.put_line('');
  dbms_output.put_line('---------------------Sayılar verilen şifrelenmesi ve çözülmesi---------------------' || chr(13));
  str           := '1234567890';
  anahtar       := 'crypto';
  sifreli_metin := smt.plsql_crypto.sifrele(str, anahtar);
  dbms_output.put_line('Şifrelenecek Sayısal Değer:=' || str);
  dbms_output.put_line('Şifrelenmiş Hali:=' || sifreli_metin);
  dbms_output.put_line(chr(13) || '<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>' || chr(13));
  cozulen_metin := smt.plsql_crypto.coz(sifreli_metin, anahtar);
  dbms_output.put_line('Çözülecek Sayısal Değer:=' || sifreli_metin);
  dbms_output.put_line('Çözülmüş Metin:=' || cozulen_metin);
END;

Burada sabit olarak verilen metin ve anahtar ile şifreleme ve çözme işlemi yapılıyor ve işlem sonucu aşağıdaki gibi olmaktadır.


---------------------Sayısal olmayan verilen şifrelenmesi ve çözülmesi---------------------

Şifrelenecek Metin:=A Place In The World Of Software , pl/sql ile crypto işlemi yapmak
Şifrelenmiş Hali:=;_Jf[]__Ch_Nb__Qilf^_I`_Mi`nq[l__&_jf)mkf_cf__]lsjni_cřf_gc_s[jg[e

<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>

Çözülecek Metin:=;_Jf[]__Ch_Nb__Qilf^_I`_Mi`nq[l__&_jf)mkf_cf__]lsjni_cřf_gc_s[jg[e
Çözülmüş Metin:=A Place In The World Of Software , pl/sql ile crypto işlemi yapmak

---------------------Sayılar verilen şifrelenmesi ve çözülmesi---------------------

Şifrelenecek Sayısal Değer:=1234567890
Şifrelenmiş Hali:=+,-./0123*

<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>

Çözülecek Sayısal Değer:=+,-./0123*
Çözülmüş Metin:=1234567890

Görüldüğü gibi sistemde var olan bir crypto işlemi gibi bizde kendi hazırladığımız kodlar ile crypto işlemini gerçekleştirmiş olduk.
Kolay gelsin.

Reklamlar
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: