Yazılım

.NET CORE ile Şifreleme ve Şifre Çözme (Encryption-Decryption)

Merhabalar;
Bu yazımda C# ile Symmetric key kullanarak önceden tanımlanmış AES sınıfı ile şifreleme ve şifre çözme örneği yapacağım.

Burada oluşturduğumuz projeye Github adresimden ulaşabilirsiniz.

AES algoritması 128, 198 ve 256 bit şifrelemeyi destekler.

Symmetric key, veri şifrelemede kullanılan bir dizedir, aynı dize ile hem şifreleme hemde şifre çözme yapılabilir.

Projeyi .NET CORE konsol uygulaması ile yapacağız, bu nedenle öncelikle bir proje başlatarak devam edebiliriz.

Projemizi oluşturduktan sonra öncelikle dizemizi bir class içerisine alalım, bunun için bir class oluşturuyoruz.

Class içeriğimiz aşağıdaki gibidir;

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace EncryptionDecryptionUsingSymmetricKey
{
    public class MyClass
    {
        public static string EncryptString(string key, string plainText)
        {
            byte[] iv = new byte[16];
            byte[] array;

            using (Aes aes = Aes.Create())
            {
                aes.Key = Encoding.UTF8.GetBytes(key);
                aes.IV = iv;

                ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

                using (MemoryStream memoryStream = new MemoryStream())
                {
                    using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter streamWriter = new StreamWriter((Stream)cryptoStream))
                        {
                            streamWriter.Write(plainText);
                        }

                        array = memoryStream.ToArray();
                    }
                }
            }

            return Convert.ToBase64String(array);
        }

        public static string DecryptString(string key, string cipherText)
        {
            byte[] iv = new byte[16];
            byte[] buffer = Convert.FromBase64String(cipherText);

            using (Aes aes = Aes.Create())
            {
                aes.Key = Encoding.UTF8.GetBytes(key);
                aes.IV = iv;
                ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

                using (MemoryStream memoryStream = new MemoryStream(buffer))
                {
                    using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader streamReader = new StreamReader((Stream)cryptoStream))
                        {
                            return streamReader.ReadToEnd();
                        }
                    }
                }
            }
        }
    }
}

Burada, şifreleme ve şifre çözme için “System.Security.Cryptography” namespace kullanan ve burada önceden tanımlanmış olarak bulunan AES class’ını kullandık.

Ayrıca, algoritmanın blok boyutunun 16 byte olan başlatma vektörünüde kullandık, bunu kullanmamız zorunlu değildir.

Şimdi Program.cs kodumuzu aşağıdaki gibi yazıyoruz;

using EncryptionDecryptionUsingSymmetricKey;
using System;
using System.Security.Cryptography;

namespace Encryption_Decryption
{
    class Program
    {
        static void Main(string[] args)
        {
            var key = "b14ca5898a4e4133bbce2ea2315a1916";

            Console.WriteLine("Şifrelenecek bir değer giriniz:");
            var str = Console.ReadLine();
            var encryptedString = MyClass.EncryptString(key, str);
            Console.WriteLine($"Şifrelenmiş = {encryptedString}");

            var decryptedString = MyClass.DecryptString(key, encryptedString);
            Console.WriteLine($"Çözülmüş = {decryptedString}");

            Console.ReadKey();
        }
    }
}

Yukarıdaki kodda önceden tanılanmış bir key kullandık istersen program içerisinde anlık key oluşturarak onuda kullanabilirdik, bunun için;

TripleDESCryptoServiceProvider key = new TripleDESCryptoServiceProvider();  
key.GenerateIV();  
key.GenerateKey(); 

Programı çalıştırarak şifrelemek istediğimiz girdiyi yazıp enter dedikten sonra şifrelenen ve tekrar çözülen değerleri ekranda görebiliriz.

Burada oluşturduğumuz projeye Github adresimden ulaşabilirsiniz.

Ali UYSAL

IT alanında 16 sene önce donanım ile başlayan tecrübem, network ve sonrasında iş analizi, yazılım geliştirme ve proje yöneticiliği alanlarında devam etmiştir. Endüstriyel yazılımlar, sahadan veri toplama ve analizleri, otomatik etiketleme ve barkod sistemleri, otomatik tartım ve robotik konularında tecrübe sahibiyim. Sanayi 4.0 kapsamında imalat sanayinin dijital dönüşümünde çok fazla projenin hayata geçmesini sağladım.Open Source projelerle uzun süre ilgilendim, analiz ve implementasyonu konularında tecrübe edindim. Bunlar dışında hobi amacıyla başlasam da sonradan ürüne dönüşen, geliştirme kartları ile farklı çalışmalarım olmuştur.Raspberry Pi üzerinde yaptığım donanımsal ve yazılımsal işler ile çok farklı ürünler ortaya çıkartarak tecrübe edindim.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu