|
.NET 'te Şifreleme Sınıflarını Kullanmak |
|
Gönderiliyor lütfen bekleyin... |
|
|
.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.
örn : 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
Makale:
.NET 'te Şifreleme Sınıflarını Kullanmak C#, Visual C# ve .NET Tuğrul Uğurlu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|