Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Tuğrul Uğurlu
Tuğrul Uğurlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
1 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: algoritma algoritmasi anahtar anahtari byte[] degeri deskey kriptografik main(string[] sifreleme sinifi siniflari static string veriyi C# / VC#/.NET Tuğrul Uğurlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 3.3.2007
Okunma Sayısı : 37569
Yorum Sayısı : 16     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 26.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 26.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 26.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 26.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
.NET 'te Şifreleme Sınıflarını Kullanmak
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
.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
  • Yazılan Yorumlar
  • Yorum Yaz
OCA
7
2012
Bilgisayar kastı fazla tıklamışım kusura bakmayın :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
OCA
7
2012
Tam bu konuda yardım ve yeterli bilgiye ihtiyacım vardı güzel anlatım teşekkür ederim :)
Sayfalar : 1 2 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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