Simetrik Şifreleme Ve C#

Simge Karahan
2 min readNov 23, 2020

--

AES C# Uygulaması

Göndermek istediğimiz verinin başkaları tarafından okunmasını engellemek istiyorsak algoritmalar ve anahtarlarla veriyi şifrelememiz gerekir. Şifreleme işlemi için çeşitli yöntemler mevcuttur. Veriyi gönderen ve alan taraflar arasında özel bir anahtar bulunması durumunda “simetrik şifreleme” işleminden bahsederiz. Güvenli ve hızlıdır ama anahtar paylaşımı problem yaratabilir. Bir de “asimetrik şifreleme” vardır, bir özel ve bir genel anahtar bulunur. Mantığı ise şöyledir, veri özel anahtarla şifrelenir ve herkesin bildiği genel anahtar ile açılır. Böylece simetrik şifrelemedeki anahtar dağıtım probleminden kurtulmuş olunur ama daha karmaşık olması nedeniyle biraz yavaşlığa neden olur.

Simetrik şifrelemeye örnek olarak AES ve DES verilebilir ama DES barındırdığı güvenlik açıklıkları (Brute Force atakları için güvenlik sağlayamıyor) nedeniyle artık kullanılmamaktadır.

AES algoritmasının adımları basitçe şu şekildedir:

  • Şifreli metin oluşturma
  • Satır kaydırma
  • Sütun karıştırma
  • Tur anahtarıyla toplama
  • Anahtar üretme

Şifrelenen verinin çözüm adımları ise şu şekildedir:

  • Ters satır kaydırma
  • Ters S kutusundan geçirme
  • Ters sütun karıştırma
  • Tur anahtarıyla toplama

C# ile AES Şifreleme Örneği

Github projemde Raspberry pi kullanarak yaptığım C# ile kriptolu haberleşme projemin kodlarına da buradan ulaşabilirsiniz.

Eklenmesi gereken şifreleme kütüphanesi: System.Security.Cryptography

Kodun ilk kısmında kullanıcıdan veri girilmesi istenmektedir. Encrypt kısmında ise veriyi şifreleme fonksiyonu ve şifrelenmiş veriyi çözme fonksiyonu çağırılıp sonuçlar ekranda gösterilir:

Kodun ikinci kısmı şifreleme fonksiyonudur:

Aes nesnesi singleton nesne olduğu için “new” ile tanımlamamız gerekmektedir.

Aes için IV (initialization vector-başlangıç vektörü) ve Key (anahtar) gereklidir. Bu değerleri kendimiz girebildiğimiz gibi Create yöntemi de bu iki değeri bizim için üretmektedir.

Şifreleme işlemi yapılacağı için CreateEncryptor ile Key ve IV değerleriyle ICryptoTransform türünde bir ara birime atandı.

Şifreleme işlemini CryptoStream yapar ve üç parametresi vardır:

  • Sonucun atılacağı bir MemoryStream (ms diye oluşturuldu)
  • Şifreleme işleminin yapılacağı encryptor (aes.CreateEncryptor’dan oluşturuldu)
  • Şifreleme yaptığımız için Write modu (Şifre çözme işlemi yapıldığı zaman Read modu yapılır)

Kodun üçüncü kısmı şifre çözme fonksiyonudur:

Şifre çözme işlemi için ise şifreleme işleminin tam tersi diyebiliriz. Bu sefer mantık aes.CreateDecryptor ile ICryptoTransform ara birimini çözümlemektir.

Ve sonuçlar:

Deneme olarak “merhaba” girildiğinde şifrelenmiş hali ve şifre çözülmüş hali gözükmektedir.

--

--

No responses yet