Bu yazimizda bir metni sifrelemeyi ve bunu veritabaninda saklamayi görecegiz.

Metni Sifreleme (Crypto)

Bu yazimizda bir metni sifrelemeyi ve bunu veritabaninda saklamayi görecegiz. Ancak herseyden önce neden bir metni cryptolariz bunun üzerinde duralim. Bir çogumuz uygulama gelistirirken bu uygulamayi kullanacak kisileri yetkilendiririz. Dolayisiyla program çalistirildiginda kullanici kodu ve sifresini girmesini istedigimiz bir form ile karsilariz. Burada kullanici kodunu ve sifresini girdikten sonra veritabaninda kullanicilar tablomuzdaki kullanici kodu ve sifresiyle eslestirerek o kisinin yetkilerini programdaki uygulariz.

Peki veritabaninda sifreleri nasil tutuyoruz. Veritabaninda kullanici tablosunu açan herkes bu sifreleri açik bir sekilde görebiliyor mu. Bir gerçek daha var ki kisiler her uygulama için ayri bir sifre seçiminde bulunmazlar. Yani içimizden bir çogumuz ayni sifreyi msn, facebook ve bir çok sifre soran web/windows uygulamalirnda kullanmakta. Bu kullanici tablolarinin baskalarinin eline geçtiginde bir çok bilgiye ulasabilmesini engelleyebilmek için uygulamamizi kullanan kisilerinin bazi bilgilerini tabloda sifreleyerek tutmamizi gerektirir.

Nasil sifreleriz, hangi sifreleme algoritmasini kullanirsak verilerimiz daha güvenli olur ? Bildigimiz gibi Microsoft.Net platformu birçok sifreleme algoritmalarini desteklemekte. Bunlar DES, RC2, Rijndael, TripleDES çift yönlü algoritmalar, MD5, SHA1 gibi tek yönlü algoritmalardir. Önemli olan hangi sifreleme yöntemini seçeceginizdir. Örnegin SHA1 algoritmasi 160 bit lik bir anahtar olusturur buna ragmen MD5 ise 128 bitlik bir anahtar olusturmaktadir. SHA1 algoritmasi MD5 algoritmasina göre daha güvenli ve kirilmasi çok daha zordur. Peki bu algoritmalari nasil kullanacagiz ? Gelin bizim isimizi kolaylastiracak, her zaman kullanabilecegimiz bir sifre olusturucu programi yazalim.

Bu uygulamamizi bir DLL olarak olusturalim ki her uygulamamiza ekleyerek çalistirabilelim. Bunun için Visual Studio.Net te File >> New >> Project... i seçip gelen ekranda Visual C# altindaki Class Library yi seçelim. Projenin adini CryptoEngine olarak verelim. Projemizi açtiktan sonra Class1.cs dosyasinin adini CryptoEngine.cs olarak degistirelim. Açiklamanin kalanini asagidaki kodun satir aralarinda rem leyerek veriyorum. 

 

public class _CryptoEngine
{
    public string SecurityKey { get; set; } 
    public _CryptoEngine(string SecKey) 
    { 
        SecurityKey = SecKey; 
    } 
    public string Encrypt(string toEncrypt, bool useHashing) 
    { 
        byte[] keyArray; 
        byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt); 
        if (useHashing) 
        { 
            MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); 
            keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(SecurityKey)); 
            hashmd5.Clear(); 
        } 
        else 
            keyArray = UTF8Encoding.UTF8.GetBytes(SecurityKey); 
        TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); 
        tdes.Key = keyArray; 
        tdes.Mode = CipherMode.ECB; 
        tdes.Padding = PaddingMode.PKCS7; 
        ICryptoTransform cTransform = tdes.CreateEncryptor(); 
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 
        tdes.Clear(); 
        return Convert.ToBase64String(resultArray, 0, resultArray.Length); 
}
public string Decrypt(string cipherString, bool useHashing) 
{ 
byte[] keyArray; 
byte[] toEncryptArray = Convert.FromBase64String(cipherString);
if (useHashing) 
{ 
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); 
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(SecurityKey)); 
hashmd5.Clear(); 
} 
	else 
	keyArray = UTF8Encoding.UTF8.GetBytes(SecurityKey); 
	TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); 
	tdes.Key = keyArray; 
	tdes.Mode = CipherMode.ECB; 
	tdes.Padding = PaddingMode.PKCS7; 
	ICryptoTransform cTransform = tdes.CreateDecryptor(); 
	byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 
	tdes.Clear(); 
	return UTF8Encoding.UTF8.GetString(resultArray); 
	} 
}

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder