1. Ana Sayfa
  2. C Sharp

C# Encrypt – Decrypt

C# Encrypt – Decrypt
+ - 10

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 n1 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.

c sharp rsa şifreleme

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. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (10)

Popüler Yorumlar
  1. “` 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.

  2. 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.

  3. İ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.

  4. İyi günler,
    Bir program yazıp teslim etme gibi şeyler yapmıyorum. Kodlar burada mevcut, lazım ise yaparsınız.
    Kolay gelsin.

  5. 2 sene önce

    Bu satırda ben de aynı hatayı alıyorum. Ama çözümü tam anlamadım, yardımcı olabilir misiniz?

Yapılan Yorumlar
  1. İ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.

  2. “` 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.

      • 2 sene önce

        Bu satırda ben de aynı hatayı alıyorum. Ama çözümü tam anlamadım, yardımcı olabilir misiniz?

  3. Merhabalar Mustafa Bey.Benim sorum biraz daha farklı bir açıdan olucak aslında.Kullandığım program normalde ücretli fakat kodlarını public olarak paylaşmış api yazılmasına müsaade ediyor.Fakat ben bu yaptığım plugini ücretli olarak pazarlamak istiyorum açıkcası.C# Class olarak yazıp dll olarak çalıştırabiliyorum program üzerinden.Dll olarak kullandığım nasıl bir offline lisanslama sistemi kullanabilirim acaba konu başlığı olarak yönlendirme şansınız olabilirse çok sevinirim.

    • Merhaba Ofline lisanslama işlemi, lisans bilgilerini bilgisayarda saklama ile yapılır. Bilgisayarın klasörlerin arasında bir yere bir kayıt atarak oradan kontrol etmeniz gerekir. Girilecek key bilgisini de bir algoritma ile üretirsiniz. Girilen keyi yazdığınız algoritmaya okutursunuz geçerli bir key ise kodlar çalışır.
      Ancak günün sonunda kırmak isteyen her türlü kırar. O yüzden kırılmaz bir lisans olacak diye diretmek mantıklı değildir.

  4. rsa.FromXmlString(publicKey.ToString()); kısmında hata alıyorum adlığım hata System.Security.XmlSyntaxException: ‘Geçersiz sözdizimi, satır: 1.’
    bununla ilgili ne yapabilirim başka bir kullanım şekli var mıdır arkadaşlardan biri ToXmlString metodu ile çözdüğünü söylemiş ama bu metod nasıl kullanılıyor yardımcı olabilir misiniz?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.