.NET Json Parser

Json datasını http://www.omdbapi.com/ adresinden çekip parçalayacağız.Siteye girip “game of thrones” diye arama yaptığımızda bize bir link oluşturuluyor. O linkte aradığımız filmin json datası var. Biz o datayı alıp işleyeceğiz.

json_1

Öncelikle projemize nuget package manager consolu açıp aşağıdaki komutu vererek Json.NET frameworkünü ekliyoruz.

Install-Package Newtonsoft.Json

 

 

Görselliğe pek önem vermedim. Siz istediğiniz gibi gelen datayı süsleyebilirsiniz.

json_2

Örnek projeyi buradan indirebilirisiniz.

Şifre Depolama(Password Storage)

Veri tabanında şifre depolarken farklı yaklaşımlar kullanılmaktadır. Bu yazımda biraz bunlara değineceğim.

Hash Kullanmak

salt

Avantajları;

  • Şifre veri tabanında depolanmaz.
  • Şifre uzunluğu tahmin edilemez.

Dezavantajları;

  • Şifre geri dönüştürülemediği için kullanıcı şifresini unutursa yeniden şifre yaratmak gerekir.
  • Farklı iki kullanıcı aynı şifreyi kullanırsa aynı değer üretilir. Bunu aşmak için salt kullanmak gerekir.
  • MD5 gibi algoritmalar kullanılırsa, brute force atakları ile şifre bulunabilir.

 

Çıktı:

saltResult

 

Şifre Bazlı Key Üretme

Çıktı:

pwResult

Adsız

Hash Fonksiyonları

Hash fonksiyonları değişken uzunluklu veri kümelerini, sabit uzunluklu verilere dönüştüren fonksiyonlardır.

İdeal bir hash fonksiyonunda aşağıdaki özellikler bulunur:

  • Herhangi bir mesaj için hash değerini hesaplamak kolaydır.
  • Herhangi bir hash değerinden mesajı elde etmek imkânsızdır.
  • Hash değeri değişmeden mesajı değiştirmek imkânsızdır.
  • İki farklı mesajdan aynı hash değerini elde etmek imkânsızdır.
  • Hash fonksiyonlarına gelen data sadece 1 bit bile değişse ortaya çıkan hash tamamen farklıdır.

MD5(message digest)

1991 yılında Ron Rivest tarafından geliştirilmiştir. Aligoritma 128-bit’lik(16-byte) bir sonuç üretir. Aligoritmanın bazı zayıflıkları tespit edilmiş olsa da kırıldığı tam olarak ispatlanamadığı için günümüzde  kullanılmaktadır.

Özellikleri:

  • Tek yönlü çalışır
  • MD5 algoritması ile bir dosyada değişiklik yapılıp yapılmadığını anlayabiliriz.
  • MD4’e göre daha yavaştır ama daha güvenlidir.

MD5 günümüzde SSL, VPN , SSH gibi yerlerde kullanılır. Login olduğumuz çoğu sistemde şifreler açık olarak tutulmaz, şifrenin MD5’li hali tutulur. MD5 tek yönlü olduğu için bu tip sistemler unutulan şifreleri kullanıcıya geri döndüremezler. Sistem random olarak kullanıcıya yeni şifre atar. Ayrıca bu tip sistemlerde iki farklı kullanıcı aynı şifreyi kullandığında aynı hash değerine sahip olacağı için çakışma yaşanır. Çakışmanın önüne geçmek için ise ikincil gerekirse üçüncül sınama yöntemleri uygulanır.

Brute Force Atakları

MD5 algoritması tek yönlü olduğu için geri dönüştürülemiyor demiştik. Bu algoritmaya brute force yapmak için ise bir sözlük oluşturuluyor. Bu sözlük büyük harf, küçük harf, sayılar, özel karakterlerden oluşuyor. Bu sözlükteki kelimeler teker teker MD5 fonksiyonundan geçirilerek bir veri tabanında saklanıyor. Somut bir örnek vermek gerekirse;

Daha önceden yazdığım MD5 fonksiyonuna “erkan” datasını gönderiyorum ve hashli halini alıyorum.

md5

Bu hashi http://md5cracker.org/ sitesinde tarattığımda ise

md5_2

tekrar kendi datama ulaşabiliyorum. Yeni geliştirilen sistemlerde ise şifrelenmiş veriyi birkaç kez daha şifreleyerek bu tip saldırılardaki başarıya ulaşma şansı daha aza indirilmiştir.

Şifrelenmiş veriyi tekrar şifrelediğimde sonuca ulaşılamıyor.

md5_3

 

md5_4

 

veya aşağıdaki metodu da kullanabilirsiniz.

 

Çıktı:

md5_5

 

Secure Hash Algorithm (SHA)

Güvenli özetleme aligoritması anlamına gelmektedir. NSA (National Security Agency) tarafından tasarlanmıştır. Günümüzde, SHA-0, SHA-1, SHA-2 olmak üzere 3 varyantı vardır. Ayrıca SHA-3 özeteleme algoritmasını daha .NET platformu desteklememektedir. Ancak üçüncü parti implementasyonları bulunmaktadır.

Çıktı:

sha_1Mesaj Doğrulama Kodu(Message Authentication Code)

Mesaj doğrulama kodları kriptolojide mesajın doğruluğunu kanıtlamak için kullanılır. Bu algoritma parametre olarak gizli anahtar ve karşıya iletilecek(doğruluğu ispatlanacak) mesajı alır. Çıktı olarak mesaj doğrulama kodu verir. Bu sayede alıcı mesajda değişiklik olup olmadığını anlayabilir. Bu işlem için daha önce yazdığım kriptografik rastgele sayı üreteçlerine göz atmanızı tavsiye ederim.

 

 

Çıktı:

mdk_1

Projeyi buradan indirebilirsiniz.

Kaynaklar:

https://en.wikipedia.org/wiki/Hash_function

https://tr.wikipedia.org/wiki/Mesaj_Do%C4%9Frulama_Kodu