C# Encrypt – Decrypt, yazımız ile c sharp eğitimlerimize devam ediyoruz. Yaklaşık bir haftadır yazı yazamıyordum ve son 3 4 gündür de site tasarımı üzerine çalıştım. Gerçi bu tasarımı pek beğenemedim ama bir süre de daha fazla da uğraşmak istemedim. C Sharp Encrypt – Decrypt işlemleri son zamanlarda konu olarak üzerinde durduğum ve önem verdiğim konulan arasında.. Bu güvenlik konuları üzerine düşmeye başladığımdan dolayı bu sitem için de SSL satın aldım. SSL konusunu da farklı bir yazımda detaylıca değineceğim. Girişi fazla uzatmadan gelin C Sharp Encrypt – Decrypt dersimize geçelim.
C Sharp Encrypt – Decrypt
Veri şifreleme konusunda bir çok yöntem vardır ancak ben şuanda projelerimde kullandığım RSA Şifreleme yöntemi anlatacağım.
Dezavantajları
- Her kullanıcı kendine ait bir şifre tutmasıyla bütün gizlenmiş metinleri tek anahtarla çözme imkanına sahiptir. Bu da anahtarın kaybolması durumunda veya başka birinin ele geçirmesi durumunda büyük sıkıntılara yol açmaktadır.
- Anahtarların değiş tokuş edilmesi gerektiğinden dolayı anahtarı karşı tarafa iletmek için bir ağ kullanmak zorundalığı vardır. Bu da ağda ekstra güvenlik önlemi almayı gerektirmektedir.
Örneğin n tane kullanıcı olması durumunda n−1 adet şifre oluşturmak gerekli ve bu sistemde tutulmalıdır. Bu da ekstra bellek alanı tutacağından bu da bir dezavantaj olarak görülebilir.
Bu siteden bir C# RSA key oluşturabilirsiniz. http://travistidwell.com/jsencrypt/demo/
Teknik konulara çok fazla girmek istemiyorum. Bu dersimde size bir veriyi şifreleme ve çözme üzerine kullanılan kodları vermek istiyorum.
Birazdan vereceğim kodları çalıştırabilmeniz için aşağıdaki namespace’lere ihtiyacınız vardır.
using System.Security.Cryptography; using System.Text;
C Sharp Encrypt RSA Şifreleme
İlk önce şifreleme kodlarını verelim.
public string Encrypt(string Text) { var publicKey = ""; // RSA Public Key'i buraya yazmalısınız. // Yukarıda verdiğim linkte görebilirsiniz. var testData = Encoding.UTF8.GetBytes(Text); using (var rsa = new RSACryptoServiceProvider(1024)) { try { rsa.FromXmlString(publicKey.ToString()); var encryptedData = rsa.Encrypt(testData, true); var base64Encrypted = Convert.ToBase64String(encryptedData); return base64Encrypted; } finally { rsa.PersistKeyInCsp = false; } } }
Evet yukarıda gördüğünüz kodlar, bir veriyi şifrelemek için gerekli olan kodlardır.
C Sharp Decrypt RSA Şifre Çözme
public string Decrypt(string Text) { string BOS = ""; try { var privateKey = ""; // buraya gizli key'inizi yazmalısınız. var testData = Encoding.UTF8.GetBytes(Text); using (var rsa = new RSACryptoServiceProvider(1024)) { try { var base64Encrypted = Text; rsa.FromXmlString(privateKey); var resultBytes = Convert.FromBase64String(base64Encrypted); var decryptedBytes = rsa.Decrypt(resultBytes, true); var decryptedData = Encoding.UTF8.GetString(decryptedBytes); return decryptedData.ToString(); } finally { rsa.PersistKeyInCsp = false; } } } catch { return BOS; } // şifre çözülemedi ise "BOS" cevabı dönecek }
Yukarıda gördüğünüz kodlar ise Public Key’imiz ile şifrelediğimiz bir veriyi çözme kodlarıdır.
Private Key (Gizli Anahtar) ile Public Key (Açık Anahtar) birbirleri ile bağlantılıdır. Başkasının şifrelediği bir veriyi siz kendi Private Key’iniz ile çözemezsiniz.
Ben kendi projelerimde kullanıcı şifreleri, sql connection string’te yer alan ip ve sql kullanıcı şifreleri yada görünmesini istemediğim parametrelerimde kullanmaktayım. Bazen benim için sorun çıkarsa da kullanılmasının gerekli olduğunu düşünüyorum. Benim için sıkıntısı ne derseniz de şöyle açıklayayım. Örnek bir yetkilendirme yaptım ve test etmem gerekiyor. Kullanıcının şifresini göremediğimden korsan yollar kullanmam yada kullanıcıdan şifresini istemem gerekiyor. Aslında öyle büyük bir sorun değil. :D
C Sharp Encrypt – Decrypt , yazımızda bu kadar dostlar diğer c sharp eğitim yazılarımızda görüşmek üzere…
C Sharp Eğitim Seti ve ERP Programlama eğitimi sayfasına gitmek için tıklayınız.
Sağlıcakla ve takipte kalın.
“` csharp
rsa.FromXmlString(publicKey.ToString());
“`
hocam yukarıdaki sattırda xml’den ötürü invalid syntax veriyor. RSACryptoServiceProvider sınıfının ToXmlString metodu ile çözülüyor haberin olsun.
Yorumun için teşekkürler.
Hiçbir dersimi deneyip çalıştığını görmeden atmıyorum. Yani çalışmayan kod atanlara sinir olduğum için çalışmayan kod asla yazmıyorum. Net.Framework ile ilgili bir şey olabilir.
Çözüm yolunu belirttiğin içinde ayrıca teşekkür ederim.
İyi günler okuldan verilen rsa şifrelemesi uygulaması ödevim var C# ile yapmam gerekiyor ancak C# ı daha önce hiç kullanmadım. Bana bu programın kendisini ve projesini atabilir misiniz. Şimdiden teşekkür ederim.
İyi günler,
Bir program yazıp teslim etme gibi şeyler yapmıyorum. Kodlar burada mevcut, lazım ise yaparsınız.
Kolay gelsin.
Bu satırda ben de aynı hatayı alıyorum. Ama çözümü tam anlamadım, yardımcı olabilir misiniz?