Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
ERDEMLİ ATL – TL – METEM
2012 – 2013 EĞİTİM ÖĞRETİM YILI
NESNE TABANLI PROGRAMLAMA YILLIK ÖDEVİ
ŞİFRELEME ALGORİTMALARININ İNCELENMESİ VE
YAZILIM GELİŞTİRİLMESİ
HAZIRLAYAN : EREN BOZARIK
SINIF : 12 – ATL
NO: 7
1
İÇİNDEKİLER
Şifreleme Algoritmalarının Tarihi …………………………………………………………………………………………. 2 Bilgisayar Programlama Teknolojisinde Kullanılan Şifreleme Algoritmaları ………………………….. 3 C# İle Şifreleme : Hash Şifreleme Algoritmaları ……………………………………………………………………. 3 Hash Şifreleme Yöntemleri…………………………………………………………………………………………………… 3 MD5 algoritması…………………………………………………………………………………………………………………… 4 SHA1 ve SHA256 Algoritmaları…………………………………………………………………………………............ 5 SHA384 ve SHA516………………………………………………………………………………………………………………. 6 C# İle Şifreleme : Simetrik Şifreleme Algoritmaları……………………………………………………………….. 6 Simetrik Şifreleme sisteminin kurulması………………………………………………………………………………. 7 Simetrik Anahtar Kriptosistemler…………………………………………………………………………………………. 8 C# ile DES Şifreleme Yöntemi Örneği……………………………………………………………………………………. 9 C# ile RC2 Şifreleme Yöntemi……………………………………………………………………………………………….. 10 C# ile Rijndael Şifreleme Yöntemi…………………………………………………………………………………………. 11 C# ile Rijndael Şifreleme Örneği……………………………………………………………………………………………. 12 C# İle Şifreleme : Asimetrik Şifreleme Algoritmaları……………………………………………………………… 13 C# ile RSA Şifreleme Yöntemi……………………………………………………………………………………………….. 13 Şifreleme Yöntemleri ile Metin Şifreleme Uygulaması Geliştirme…………………………………………. 14
2
Şifreleme Algoritmalarının Tarihi
Kriptoloji
Kriptoloji, şifre bilimidir. Çeşitli iletilerin, yazıların belli bir sisteme göre şifrelenmesi, bu mesajların güvenlikli bir ortamda alıcıya iletilmesi ve iletilmiş mesajın deşifresiyle uğraşır. Günümüz teknolojisinin baş döndürücü hızı göz önünde alındığında, teknolojinin gelişmesiyle birlikte ortaya çıkan güvenlik açığının da taşıdığı önem ortaya çıkmaktadır. Kriptoloji; askerî kurumlardan, kişiler arası veya özel devlet kurumları arasındaki iletişimlerden, sistemlerin oluşumunda ve işleyişindeki güvenlik boşluklarına kadar her türlü dalla alakalıdır. Kriptoloji=Kriptografi + Kriptoanaliz Kriptoloji bilmi kendi içerisinde iki farklı branşa ayrılır Kriptografi ; şifreleri yazmak ve Kriptoanaliz ;şifreleri çözmek ya da analiz etmek. Kriptoloji, çok eski ve renkli bir geçmişe sahiptir. Tarihten günümüze kadar, bazı şifreleme teknikleri şunlardır:
1. Sezar şifrelemesi 2. Rotor makinesi (Enigma) 3. Açık anahtarlı şifreleme 4. Çırpı fonksiyonları 5. Veri gizleme teknikleri
Kullanım Alanları İletişim kurmak isteyen iki kişinin bir birlerine e-posta aracılığı ile ileti göndermesini göz önünde tutalım. Bu iletiler bir çok bilgisayardan geçmektedir. A kullanıcısından B kullanıcısına gittiğinde daha önce açılıp okunmadığını veya açılıp üstünde değişiklik yapmadığını bilemeyiz. Bu yüzden devreye kriptolama girmektedir. Kripto teknikleri genelde bu yazıyı daha önce hazırlanmış bir algoritma ile şifreli bir metin haline getirir. Örnek olarak buna Sezar şifresi diyebiliriz. Bir başka iletişim tekniğini göz önüne alırsak, örneğin telsiz haberleşmelerinde de buna benzer sistemler kullanılmaktadır. Ses önce şifrelenir karşıya gönderilir orda şifre açılır ve ses araya başka bir kullanıcı girmeden güvenli bir şekilde teslim edilmiş olur. Dikkat edeceğimiz gibi kriptoloji iletişim materyallerinin kullanıldığı her alanda gizliliği sağlamak için kullanılmaktadır (ses, görüntü, metin v.s ). Askeri ve İstihbarat işlerinde de kullanılır.
3
Bilgisayar Programlama Teknolojisinde Kullanılan Şifreleme Algoritmaları
C# İle Şifreleme : Hash Şifreleme Algoritmaları
.Net ile beraber bir çok şifreleme kütüphanesi hazır olarak geliyor. Bu şifreleme sınıfları
System.Security.Cryptography kütüphanesi içerisinde yeralmaktadır.
Öncelikli olarak şifreleme yöntemlerini sınıflandırmakta fayda var, şu an dünya üzerinde 3
farklı şifreleme yöntemi bulunmaktadır. Bunlar ;
Hash Şifreleme Yöntemleri
MD5
SHA1
SHA256
SHA384
SHA512
Simetrik Şifreleme Yöntemleri
DES
Triple DES
RC2
Rijndael
Asimetrik Şifreleme Yöntemleri
DSA
RSA
Hash Şifreleme Yöntemleri
Şifrelenen veriye tekrar ulaşmanız mümkün değildir. Şöyleki varsayalım 1000 karakterlik bir
veriyi md5, sha 1, sha256 veya sha512 ile şifrelediniz bu durumda elde edeceğiniz şifrelenmiş
veri algoritma türüne göre standart boyutta bir karakter katarı olacaktır. Pek tabi şöyle bir
soru ortaya çıkacaktır, "eğer şifrelediğim veriye ulaşamayacaksam niye şifreleyim". Bu
sorunun cevabı çok basit, bazı yaptığımız uygulamalarda şifrelenmemiş veriyi görmemiz
gerekmez, örneğin bir forum açtınız, kullanıcılarınız sisteme üye olarak foruma girebilecek.
İşte burada dürüst bir programcı gibi davranarak, kullanıcının girdiği şifre bilgisini Hash
algoritma ile şifreleyip veritabanımızda saklamak daha doğru olacaktır. Böylece login işlemi
sırasında kullanıcının girdiği veriyi tekrar şifreleyip veritabınındaki şifrelenmiş veri ile
karşılaştırabiliriz. Böylece hem kullanıcının şifresini görmeyip kullanıcının özel bilgilerine saygı
göstermiş oluruz hemde veri güvenliği sağlamış oluruz.
4
Şifreleme örneklerimize başlamadan hemen hemen tüm örneklerde karşımıza çıkacak örnek
fonksiyonları buraya yazalım.
MD5 algoritması, .Net’in kütüphanesinde mevcuttur. Şimdi bu algoritmanın C# dili ile nasıl
kullanılacağını inceleyelim.
MD5 Şifreleme
public static byte[] ByteDonustur(string deger) { UnicodeEncoding ByteConverter = new UnicodeEncoding(); return ByteConverter.GetBytes(deger); } public static byte[] Byte8(string deger) { char[] arrayChar = deger.ToCharArray(); byte[] arrayByte = new byte[arrayChar.Length]; for (int i = 0; i < arrayByte.Length; i++) { arrayByte[i] = Convert.ToByte(arrayChar[i]); } return arrayByte; }
public string MD5(string strGiris) { if (strGiris == "" || strGiris==null) { throw new ArgumentNullException("Şifrelenecek veri yok"); } else { MD5CryptoServiceProvider sifre = new MD5CryptoServiceProvider(); byte[] arySifre = ByteDonustur(strGiris); byte[] aryHash = sifre.ComputeHash(arySifre); return BitConverter.ToString(aryHash); } }
MD5 ( Message-Digest Alghoritm 5) isimli algoritma, günümüzde şifreleme konusunda en
çok kullanılan şifreleme algoritmalarından birisidir. Şifrelemek istenilen veriyi 128 bit
uzunluğunda şifreler ve tek yönlü şifreleme algoritması olarak da bilinir. Genellikle şifre
saklamak için kullanılmaktadır.
5
SHA1 ve SHA256 günümüz web ve windows uygulamalarında sıklıkla kullandığımız hash adı
verilen şifreleme algoritmalarıdır. Bu makalemizde bu teknikleri kullanmanın aslında ne
kadar kolay olduğunu göreceğiz.
Öncelikle şunu belirtmeliyim, SHA256 ve SHA1 sadece tek yönlü şifreleme yapabilen ve her
zaman aynı sonucu veren fonksiyonlardır. Yani şifreleme sonrasında oluşturulan string ifade,
eski haline çevrilemez. Uygulama geliştirici, oluşturulan string ifadeleri karşılaştırarak
doğruluğu kontrol eder. Günümüz web uygulamalarında özellikle üyelik kayıt, üyelik girişi gibi
işlemlerde kullanılırlar.
SHA1 SHA256 public string SHA1(string strGiris) { if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Şifrelenecek veri yok."); }else { SHA1CryptoServiceProvider sifre = new SHA1CryptoServiceProvider(); byte[] arySifre = ByteDonustur(strGiris); byte[] aryHash = sifre.ComputeHash(arySifre); return BitConverter.ToString(aryHash); } }
public string SHA256(string strGiris) { if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Şifrelenecek Veri Yok"); }else { SHA256Managed sifre = new SHA256Managed(); byte[] arySifre = ByteDonustur(strGiris); byte[] aryHash = sifre.ComputeHash(arySifre); return BitConverter.ToString(aryHash); } }
Verinin şifrelenmesi ve daha sonraki kontrolü şu şekilde bir yaşam döngüsüne sahiptir.
1.Ziyaretçi, bilgilerini üye kayıt formuna girer.
2.Bilgilerden örneğin şifre alanı SHA256 veya SHA1 şifreleme algoritmaları vasıtasıyla
şifrelenerek veritabanına yazılır.
3.Daha sonraki zamanlarda ziyaretçi üye girişi için şifresini girip, siteye giriş yapmak
istediğinde formdan gelen şifre alanı tekrar aynı şekilde şifrelenir.
4.Şifrelenme sonucunda ortaya çıkan string ifade ile veritabanındaki şifre alanındaki
şifrelenmiş string ifade karşılaştırılır.
5.Sonuç aynı ise giriş doğrulanır, eğer farklı ise şifreler birbirini tutmuyor demektir. Bu da
şifrenin ziyaretçi tarafından yanlış girildiğini anlamına gelmektedir.
6
SHA384 Şifreleme
SHA512 Şifreleme
public string SHA384(string strGiris) { if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Şifrelenecek veri bulunamadı."); }else { SHA384Managed sifre = new SHA384Managed(); byte[] arySifre = ByteDonustur(strGiris); byte[] aryHash = sifre.ComputeHash(arySifre); return BitConverter.ToString(aryHash); } }
public string SHA512(string strGiris) { if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Şifrelenecek veri yok."); } else { SHA512Managed sifre = new SHA512Managed(); byte[] arySifre = ByteDonustur(strGiris); byte[] aryHash = sifre.ComputeHash(arySifre); return BitConverter.ToString(aryHash); } }
C# İle Şifreleme : Simetrik Şifreleme Algoritmaları
Simetrik şifreleme yöntemlerinde şifrelenen veriye ulaşmak için şifreyi çözen tarafın veriyi
şifreleyen tarafla aynı anahtara ihtiyacı vardır. C# Simetrik şifreleme yöntemlerinden 3
tanesini hazır olarak bize sunar.
Bilgisayar bilimlerinin önemli konularından birisi de veri güvenliğidir. Bu konuda yapılan
çalışmaların bir kısmı şifreleme (cryptography) başlığı altında toplanabilir. Basitçe
matematiksel yöntemler kullanılarak verinin anlaşılmaz hale gelmesi ve ancak doğru kişiler
tarafından açılması olarak tanımlanabilecek şifreleme işlemi simetrik ve asimetrik şifreleme
(public key cryptography) olarak iki grupta toplanabilir.
Simetrik şifrelemede genelde şifreleme işlemi bir anahtar (key) marifetiyle olur. Bu anahtar
iki taraf tarafından daha önceden bilinen bir bilgidir ve bir tarafın anahtar ile şifrelediği bilgi
diğer taraftaki anahtar ile açılabilir.
7
Aşağıdaki şekilde basit bir simetrik şifrelemede bulunan iki taraf görülmektedir.
Yandaki şekilde şifreleme sistemimizi kullanan iki kişi gösterilmektedir. Bir taraf şifreleyen (Ali) diğer taraf ise şifreyi açan (Bekir) taraf olarak kabul edilsin. Burada kullanılan isimler genelde şifreleme literatüründe Alice ve Bob olarak geçer ancak yazının Türkçe olmasından dolayı yine aynı baş harflerle başlayan (alfabenin ilk iki harfi olan A ve B) iki farklı isim uydurulmuştur.
Simetrik Şifreleme sisteminin kurulması
Simetrik şifreleme sistemlerinin ilk aşaması sistemin kurulmasıdır. Bu aşama bazı şifreleme
sistemlerinde sadece bir anahtarın iki taraf tarafından bilinmesi kadar basitken bazı
sistemlerde karmaşık hesaplamalar sonucunda elde edilir. Örneğin en basit simetrik
şifreleme yöntemlerinden birisi olan kaydırma şifrelemesini (shift cipher) ele alalım.
Mesajda bulunan harfler alfabetik olarak (lexiconically) anahtar kadar kaydırılır. Örneğin
anahtar 2 ise her harf alfabede kendinden iki sonraki harf olacaktır (a->c , l->n veya z->b
şeklinde).
Bu sistemdeki anahtarın iki taraf tarafından bilinmesi yeterlidir. Yani 2 bilgisinin bir şekilde
hem şifreleyen hem de şifreyi açan kişi tarafından önceden bilinmesi sistemin kurulması
aşamasıdır.
Bu anahtar değişimi aşaması için çeşitli algoritmalar mevcuttur. Örneğin diffie-hellman anahtar değişim algoritması (diffie-hellman key Exchange aglorithm) okunabilir. Yandaki şekilde iki taraf da sistemi kurup hazır olduktan sonra şifreleme aşamasına geçilir.
8
Simetrik Şifreleme Örneği public static byte[] ByteDonustur(string deger) { UnicodeEncoding ByteConverter = new UnicodeEncoding(); return ByteConverter.GetBytes(deger); } public static byte[] Byte8(string deger) { char[] arrayChar = deger.ToCharArray(); byte[] arrayByte = new byte[arrayChar.Length]; for (int i = 0; i < arrayByte.Length; i++) { arrayByte[i] = Convert.ToByte(arrayChar[i]); } return arrayByte; }
Simetrik Anahtar Kriptosistemler Simetrik kriptosistemlerde, şifreleme anahtarının deşifreleme anahtarından üretilmesi oldukça kolaydır. Çoğu simetrik algoritmalarda, şifreleme ve deşifreleme için kullanılan anahtar aynıdır. Bu algoritmaların güvenliği anahtara bağlı olduğundan anahtar gizli tutulmalıdır. Simetrik anahtar kriptosisteminin genel yapısı yandaki şekilde görülmektedir.
Simetrik anahtar kriptosistemi
Simetrik anahtarlı şifreleme yöntemleri, yerine koyma, yer değiştirme ve cebirsel yöntemler
olarak sınıflandırılabilir.Yerine koyma şifreleme yönteminde orijinal mesajın harfleri başka bir
alfabenin harfleriyle değiştirilir. Açık metindeki harflerin ardışıklığı değişmez. Yer değişme
şifreleme yönteminde açık metin harflerinde değişiklik olmaz. Harflerin yeniden
düzenlenmesi için çeşitli yöntemler mevcuttur. Cebirsel şifreleme yöntemleri ise iki
aşamadan oluşmaktadır. Birinci aşamada, açık metne yerine koyma şifreleme yöntemi, ikinci
aşamada ise rasgele bir yer değişme şifreleme yöntemi uygulanır.
Bunlar dışında tekil olmayan matrislerle şifreleme ve DES simetrik anahtar şifreleme
algoritmalarındandır. DES (Data Encryption Standard), 64 bitlik bloklar halinde şifreleme
yapan bir blok şifreleyicisidir
Aşağıda DES şifreleme yöntemine bir örnek verilmiştir.
9
C# ile DES Şifreleme Yöntemi Örneği public string DESSifrele(string strGiris) { string sonuc = ""; if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Şifrelenecek veri yok"); } else{ byte[] aryKey = Byte8("12345678"); // BURAYA 8 bit string DEĞER GİRİN byte[] aryIV = Byte8("12345678"); // BURAYA 8 bit string DEĞER GİRİN DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write); StreamWriter writer = new StreamWriter(cs); writer.Write(strGiris); writer.Flush(); cs.FlushFinalBlock(); writer.Flush(); sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); writer.Dispose(); cs.Dispose(); ms.Dispose(); } return sonuc; } public string DESCoz(string strGiris) { string strSonuc = ""; if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Şifrelenecek veri yok.");} else { byte[] aryKey = Byte8("12345678"); byte[] aryIV = Byte8("12345678"); DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris)); CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read); StreamReader reader = new StreamReader(cs); strSonuc = reader.ReadToEnd(); reader.Dispose(); cs.Dispose(); ms.Dispose(); } return strSonuc; }
10
C# ile RC2 Şifreleme Yöntemi
RC2 algoritması 8 bit anahtar ve 8 bit iv değeri kullanır.
public string Sifrele(string strGiris) { string sonuc = ""; if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Şifrelenecek veri yok."); } else { byte[] aryKey = Byte8("12345678"); byte[] aryIV = Byte8("12345678"); RC2CryptoServiceProvider dec = new RC2CryptoServiceProvider(); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, dec.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write); StreamWriter writer = new StreamWriter(cs); writer.Write(strGiris); writer.Flush(); cs.FlushFinalBlock(); writer.Flush(); sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); writer.Dispose(); cs.Dispose(); ms.Dispose(); } return sonuc; } public string Coz(string strGiris) { string strSonuc = ""; if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Şifresi çözülecek veri yok."); } else { byte[] aryKey = Byte8("12345678"); byte[] aryIV = Byte8("12345678"); RC2CryptoServiceProvider cp = new RC2CryptoServiceProvider(); MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris)); CryptoStream cs = new CryptoStream(ms, cp.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read); StreamReader reader = new StreamReader(cs); strSonuc = reader.ReadToEnd(); reader.Dispose(); cs.Dispose(); ms.Dispose() } return strSonuc; }
11
C# ile Rijndael Şifreleme Yöntemi
Rijndael Şifreleme Algoritması Galois’in alan teorisi üzerine kurulu olan Rijndael, DES gibi yer
değiştirme ve permütasyon tekniklerini bir çok defa kullanarak şifrelemeyi gerçekleştiren bir
şifreleme algoritmasıdır.
Rijndael algoritmasının nasıl gerçekleşebileceğimizi inceleyeceğiz. Zorluk Derecesi: 1 2 3 4 5
Anahtar Sözcükler: Şifreleme Algoritması, Rijndael, DES, Microsoft .NET, Kriptoloji Galois’in
alan teorisi üzerine kurulu olan Rijndael, DES gibi yer değiştirme ve permütasyon tekniklerini
bir çok defa kullanarak şifrelemeyi gerçekleştirmektedir.
Kaç sefer bu yer değiştirme ve permütasyon tekniklerinin tekrarlanacağı anahtar ve blok
boyutuna bağlıdır. Örneğin, 128 bitlik anahtar ve 128 bitlik blok boyutları ile yapılacak
şifreleme için bu tekrar sayısı 10’dur. DES’ten farklı olarak donanım ve yazılım olarak
yapılmasının kolay olması için bütün işlemler tüm byte’ları kullanmaktadır(Geri besleme
boyutu blok boyutuna eşittir).
Bu algoritma oldukça hızlı çalışması yönüyle tercih edilmektedir.Microsoft .NET Framework’
te System.Security.Cryptography altında yer alan Rijndael soyut sınıfı Rijndael algoritmasını
gerçeklemek isteyen sınıflar için ana sınıfı tanımlar. Rijndael sınıfında yer alan erişilebilir
özellikleri şunlardır: BlockSize, kriptografik işlemler için kullanılacak olan blok boyutunu bit
olarak belirtir. Varsayılan değeri 128 bit dir.
12
C# ile Rijndael Şifreleme Örneği Rijndael algoritması 8 anahtar ve 16 bit iv değeri kullanır. public string Sifrele(string strGiris) { string sonuc = ""; if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Şifrelenecek veri yok."); } else { byte[] aryKey = Byte8("12345678"); byte[] aryIV = Byte8("1234567812345678"); RijndaelManaged dec = new RijndaelManaged(); dec.Mode = CipherMode.CBC; MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, dec.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write); StreamWriter writer = new StreamWriter(cs); writer.Write(strGiris); writer.Flush(); cs.FlushFinalBlock(); writer.Flush(); sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); writer.Dispose(); cs.Dispose(); ms.Dispose();} return sonuc;} public string Coz(string strGiris) { string strSonuc = ""; if (strGiris == "" || strGiris == null){ throw new ArgumentNullException("Şifrezi çözülecek veri yok.");} Else { byte[] aryKey = Byte8("12345678"); byte[] aryIV = Byte8("1234567812345678"); RijndaelManaged cp = new RijndaelManaged(); MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris)); CryptoStream cs = new CryptoStream(ms, cp.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read); StreamReader reader = new StreamReader(cs); strSonuc = reader.ReadToEnd(); reader.Dispose(); cs.Dispose(); ms.Dispose(); } return strSonuc; }
13
C# İle Şifreleme : Asimetrik Şifreleme Algoritmaları
Asimetrik şifreleme yöntemleri ileri düzey şifreleme yöntemleridir. Bu algoritma türünde
veriyi şifreleyen taraf ile veriyi çözecek olan taraf birbirinden farklı anahtarlar kullanırlar.
C# ile RSA Şifreleme Yöntemi
public static byte[] ByteDonustur(string deger) { UnicodeEncoding ByteConverter = new UnicodeEncoding(); return ByteConverter.GetBytes(deger); } public static byte[] Byte8(string deger) { char[] arrayChar = deger.ToCharArray(); byte[] arrayByte = new byte[arrayChar.Length]; for (int i = 0; i < arrayByte.Length; i++) { arrayByte[i] = Convert.ToByte(arrayChar[i]); } return arrayByte; }
public string Sifrele(string strGiris, out RSAParameters prm){ string strSonuc = ""; if (strGiris == "") { throw new ArgumentNullException("Şifrelenecek veri yok."); } else { byte[] aryDizi = ByteDonustur(strGiris); RSACryptoServiceProvider dec = new RSACryptoServiceProvider(); prm = dec.ExportParameters(true); byte[] aryDonus = dec.Encrypt(aryDizi, false); strSonuc = Convert.ToBase64String(aryDonus); } return strSonuc; } public string Coz(string strGiris, RSAParameters prm) { string strSonuc = ""; if (strGiris == "" || strGiris == null) { throw new ArgumentNullException("Çözülecek kayıt yok"); } else { RSACryptoServiceProvider dec = new RSACryptoServiceProvider(); byte[] aryDizi = Convert.FromBase64String(strGiris); UnicodeEncoding UE = new UnicodeEncoding(); dec.ImportParameters(prm); byte[] aryDonus = dec.Decrypt(aryDizi, false); strSonuc = UE.GetString(aryDonus);} return strSonuc;
14
Şifreleme Yöntemleri ile Metin Şifreleme Uygulaması Geliştirme
Alfabede bulunan karakterlerinin sayı sırasına göre metinleri şifreleme
yöntemini yani Matris Metin Şifreleme ile birleştirerek uygulamamızı
geliştireceğiz.
ÖRNEK :
Matris Metin Şifreleme using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string harfSeti = @"ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZXWQ.?!,' "; var harfler = harfSeti.ToCharArray().Select((s, i) => new { harf = s, index = i }); string rich1; rich1 = Console.ReadLine(); var cryted = rich1.ToCharArray().Join(harfler, h => h, hi => hi.harf, (h, hi) => hi.index); var sira1 = String.Join("", cryted.Where((c, i) => i % 2 == 0)); var sira2 = String.Join("", cryted.Where((c, i) => i % 2 == 1)); string rich2 = sira1 + '\n' + sira2; Console.WriteLine(rich2); Console.ReadKey(); } } }
15
Proje :
https://hotfile.com/dl/187598113/5f9f848/MatrisSistemi.rar.html
Kaynaklar :
http://en.wikipedia.org/wiki/RSA_(algorithm)
http://ultrastudio.org/en/RSA_encryption_algorithm
http://www.networksorcery.com/enp/data/encryption.htm
http://tdsoftware.wordpress.com/tag/aes-rijndael-sifreleme-algoritmasi/