.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]; |
İş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.
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.
class SimetrikWrite { const string desKey = "12345678"; const string desIv = "ABCDEFGH"; |
Örnek : SimetrikRead.cs
|
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
|
Çıktı Sonucu Aşağıdaki Gibi Olmalıdır.
|
Decrypt İşleminin Sonucu Aşağıdaki Gibi Olmalıdır.