Zemin Zemin
bos
         Makalelerde Haberlerde Gruplarda
Arama Göstergesi
Site içi arama Site içi arama
Anasayfam Yap Favorilerime Ekle Bize Ulaşın IE7 Provider
BETA 2.1
IE6.0+, FireFox 2.0'ı destekler
 
   
bos bos bos
bos
Kapat

İlk Yorumu Siz Yapın.



Başlık
Yorum
« Geri Yorumlar Makaleyi Sakla Arkadaşıma Gönder Yazdır

Yazar : Tuğrul UĞURLU
Okunma Sayısı : 13773
Tarih : 01.03.2007 11:04:47
Kategori : NetFramework
Konu : .NET 'te Şifreleme Sınıflarını Kullanmak
Açıklama : .NET platformu, kriptografik işlemler için kullanılabilecek zengin sınıflar içerir. .NET Platformunda kriptografik sınıfların çoğu, Windows Cryptographic Service Providers (Windows kriptografik servis sağlayıcılar) için yönetilen bir pakettir.

.NET 'te Şifreleme Sınıflarını Kullanmak

.NET platformu, kriptografik işlemler için kullanılabilecek zengin sınıflar içerir. .NET Platformunda kriptografik sınıfların çoğu, Windows Cryptographic Service Providers (Windows kriptografik servis sağlayıcılar) için yönetilen bir pakettir.

Hash Algoritmalarını Kullanmak :

Bir hash algoritması, uzunluğu belli olmayan bir dizenin içeriğini benzersiz şekilde şifreleyerek bir değer üretir.Hash değerleri bir dosya içindeki değişiklikleri tespit etmek için kullanışlıdır. Dosyanın durumunun herhangi bir anda fotoğrafını çekme imkanı sunar. Bu Sayede bir önceki hash değerleri ile dosyanın o andaki hash değerlerini karşılaştırarak dosyada değişiklik yapılmışmı yapılmamışmı öğrenebilirsiniz.

.NET platformu içindeki sınıflar, aşağıdaki hash algoritmalarını kullanmaktadır.

  • MD5 - 128-bit hash değeri üretmektedir. MD5CryptoServiceProvider sınıfı tarafından uygulanmaktadır.
  • SAH1 - 160-bit hash değeri üretmektedir. SHA1CryptoServiceProvider ve SHA1Managed sınıfları tarafından uygulanmaktadır.
  • SHA256 - 256-bit hash değeri üretmektedir. SHA256CryptoServiceProvider ve SHA256Managed sınıfları tarafından uygulanmaktadır.
  • SHA384 - 384-bit hash değeri üretmektedir. SHA384CryptoServiceProvider ve SHA384Managed sınıfları tarafından uygulanmaktadır.
  • SHA512 - 512-bit hash değeri üretmektedir. SHA512CryptoServiceProvider ve SHA512Managed sınıfları tarafından uygulanmaktadır.

Not : MD5 en hızlı fakat en az güvenli algoritmadır. Her SHA algoritması daha güvenlidir ama daha falza hesaplama gerektirmektedir.

ÖRNEK:

   static  byte[] ByteDonustur(string  deger)
   {
       char[] arrayChar = deger.ToCharArray();
       byte[] arrayByte = new  byte[arrayChar.Length];
for (int i = 0; i < arrayByte.Length - 1; i++) arrayByte[i] = Convert.ToByte(arrayChar[i]);
return arrayByte; }

static void Main(string[] args) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] deger = ByteDonustur("ABCDEFG"); byte[] sonuc = md5.ComputeHash(deger);
Console.WriteLine(BitConverter.ToString(sonuc)); Console.ReadLine(); }

İşleminden çıkan sonucun değeri.

Burada dikkat edilmesi gereken hususlara gelecek olursak ComputeHash() Metoduna bir dizeyi doğrudan geçiremezsiniz. ByteDonustur() Metodu kullanılarak dize ComputeHash() verilmeden önce byte dizisine dönüştürülmektedir.ComputeHash() metodu tarafından geri döndürülen byte dizisi BitConverter sınıfı ile dizeye geri dönüştürülmektedir.

SİMETRİK ŞİFRELEME ALGORİTMALARI

Bir veriyi simetrik bir veri algoritması ile şifrelediğinizde gönderici ve alıcının aynı şifre çözücü anahtara sahip olmak zorundadır. .NET platformundaki sınıflar aşağıdaki simetrik algoritmaları desteklemektedir.

  • DES - Birleşik Devletler Veri Şifreleme Standartı (Data Encryption Standart) : Bu algoritma DESCryptoServiceProvider sınıfı tarafından uygulanmaktadır.

  • Triple DES - DES algoritması sıralı şekilde üç farklı şifreleme anahtarı ile uygulanır. Bu algoritma TripleDESCryptoServiceProvider sınıfı tarafından uygulanmaktadır.

  • RC2 - RC2 Blok Şifresi (Block Cipher). Bu algoritma RC2CryptoServiceProvider sınıfı tarafından uygulanmaktadır.

  • Rijndael - İleri Düzey Şifreleme Standartı tarafından kullanılan algoritmadır. Bu algoritma RijndaelManaged sınıfı tarafından uygulanmaktadır.
Örnek : SimetrikWrite.cs
class SimetrikWrite 
{
        const  string desKey = "12345678";
        const  string desIv  = "ABCDEFGH";

static byte[] ByteDonustur(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; }

static void Main(string[] args) { byte[] arrayDESKey = ByteDonustur(desKey); byte[] arrayDESIV = ByteDonustur(desIv); byte[] arrayInput = ByteDonustur("Merhaba Dünya");
DESCryptoServiceProvider des = new DESCryptoServiceProvider();

//Formun en üstünde desKey ve desIv isimli iki tane sabit var. DESCryptoServiceProvider sınıfı ile veriyi
//şifrelediğinizde hem gizli bir anahtar hem de bir ilk değer vektörü sağlamalısınız çünkü yarattığınız dosyadaki
//şifreyi çözmek istediğinizde ihtiyaç duyacaksınız. Bu dizilere istediğiniz 8 karakter dizesini atayabilirsiniz.

ICryptoTransform cEncryptor = des.CreateEncryptor(arrayDESKey, arrayDESIV);
CryptoStream cStream = new CryptoStream(new FileStream("c:\\simetrik.text", FileMode.Create, FileAccess.Write),
cEncryptor, CryptoStreamMode.Write);
cStream.Write(arrayInput,0,arrayInput.Length);
cStream.Close();
Console.ReadLine();
}
}

Örnek : SimetrikRead.cs

	

class SimetrikRead {
//Bu sabitlerin değeri SimetrikWriter Dosyasındaki desKey ve desIv sabitleri ile uyuşmalıdır.
const string desKey = "12345678";
const string desIv = "ABCDEFGH";

static byte[] ByteDonustur(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; }

static void Main(string[] args)
{
byte[] arrayDesKey = ByteDonustur(desKey);
byte[] arrayDesIv = ByteDonustur(desIv);

DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform cDecryptor = des.CreateDecryptor(arrayDesKey,arrayDesIv);
CryptoStream cStream = new CryptoStream(new FileStream("C:\\simetrik.text", FileMode.Open),
cDecryptor, CryptoStreamMode.Read);
Console.WriteLine(new StreamReader(cStream).ReadToEnd());
Console.ReadLine(); }
}

ASİMETRİK ŞİFRELEME KULLANMAK

Simetrik şifreleme algoritması kullandığımız zaman, uygulamayı kullananların aynı ortak şifre çözücü anahtara sahip olmaları gerekir. Asimetrik şifreleme algoritması kullandığınız zaman veriyi şifrelemek ve çözmek için kullanılan anahtar farklıdır. Asimetrik şifreleme algoritmaları bir anahtar çifti kullanır. Eğer veriyi bir anahtar ile şifrelediyseniz çözmek için diğer anahtarı kullanırsınız.

.NET platformundaki sınıflar aşağıdaki asimetrik algoritmaları desteklemektedir.

  • DSA - Dijital İmza Algoritması(Digital Signature Algorithm - Birleşik Devletler Hükümetinin Dijital Doğrulama Standartı). DSACryptoServiceProvider sınıfı tarafından uygulanmaktadır.
  • RSA - Bu Algoritma, RSACryptoServiceProvider sınfı tarafından uygulanmaktadır.

Her iki metodta AsymmetricAlgorithm sınıfında uygulanmaktadır. Bu yüzden aynı metod ve özelliklerin bir çoğunu paylaşmaktadırlar. Sınıflardan herhangi birisini yaratırsanız, genel ve özel anahtarları otomatik olarak üretilir.Genel veya özel anahtara ToXmlString ya da ExportParameters metotları ile erişebilirsiniz. ToXmlString metodu, genel ve özel anahtarları XML dizesinde tutar.

Aşağıdaki örnekte DSACryptoServiceProvider sınıfını yaratıp özel ve genel anahtarlarını görüntülemektedir.

DSACryptoServiceProvider dsa = new DSACryptoServiceProvider();

Console.Write("Özel Anahtarlar : ");
//Özel Anahtarı Görüntülemek İçin true
Console.WriteLine(dsa.ToXmlString(true));

Console.Write("Genel Anahtarlar : ");
//Genel Anahtarı Görüntülemek İçin false
Console.WriteLine(dsa.ToXmlString(false));

İşlemin sonucunda aşağıdakine benzer bir çıktı üretecektir.


Örnek : AsimetrikWrite.cs

class AsimetrikWrite { static void Main(string[] args) {
byte[] dizi = {1,2,3,4,5,6,7}

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); byte[] sonucEncrypt = rsa.Encrypt(dizi,false);
for(int i = 0; i < sonucEncrypt.Length; i++)
Console.Write(sonucEncrypt[i] + " ");
}
}

Çıktı Sonucu Aşağıdaki Gibi Olmalıdır.

class AsimetrikRead
{
static void Main(string[] args)
{
byte[] dizi = {1,2,3,4,5,6,7};

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] sonucEncrypt = rsa.Encrypt(dizi,false);

for(int i = 0; i < sonucEncrypt.Length; i++)
Console.Write(sonucEncrypt[i] + " ");

Console.WriteLine("\n\n");
byte[] sonucDecrypt = rsa.Decrypt(sonucEncrypt,false);

for(int i = 0; i < sonucDecrypt.Length; i++)
Console.Write(sonucDecrypt[i] + " ");
Console.ReadLine();
}
}

Decrypt İşleminin Sonucu Aşağıdaki Gibi Olmalıdır.

Tuğrul UĞURLU

 
Şifremi Unuttum
Üye Ol

ASP.NET AJAX
ASP.NET AJAX Kitabı

Röportaj Dr. Arzu Baloğlu ile Türkiye ve Bilişim üzerine keyifli bir röportaj...


isarayan.org
Yenibiriş Logo
 
bos bos bos
bos Hakkımızda