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.