İyi günler dilerim Türk Hack Team ailesi.
Bugün sizlerle beraber Dotnet 6 ile encoder yapıcağız.
Encoder nedir?
Yapılışından önce ilk başta ne olduğunu öğrenmemiz gerekiyor bu encoder'ın. Encoder veya Encryption olarakta geçmektedir. Bu metodlar bir veriyi okunur halden belirli matematiksel formülleri kullanarak okunmaz bir hal getiriyor. Türkçesi şifreleyici olarak geçmektedir. Aslında bu şifreleyicilerin tarihine baktığımızda kulağımızın aşına olduğu bir insan ilede karşılaşırız. Jül Sezar, savaşlarda kullanmak üzere Sezar şifreleme yöntemini icat etmiştir. Bu şifreleme yöntemi aslında bakılırsa bu döneme göre çok işe yaramayacak bir sistem olsada Sezarın yaşadığı ilker dönemi düşündüğümüzde çok dahice bir şey olduğunu görebiliriz. Sezar şifreleme tekniği, harflerin yerleriyle oynamaktadır. Örnek vermek gerekirse,
A harfine bakalım. A harfinden sonra gelen kelime B olduğu için A yerine B kullanması gibi. ABİ kelimesinin harflerine bakalım. A, B, İ olmak üzere toplam 3 adet harf olduğunu görebileceğiz. Simdi bunlardan sonra gelen harfleri bu harflerin yerlerine yerleştirdiğimizde ortaya BCJ gibi anlamsız bir kelime ortaya çıkıyor.
Encoder yapımına başlıyalım.
İlk başta yeni bir proje oluşturarak başlayalım.
C#:
dotnet new webapi
WebAPI sablonu kullanmamız bize avantaj sağlıyacaktır. Yeni bir proje oluşturduktan sonra build olarak doğru kurup kurmadığımı kontrol ediyorum.
Kod:
dotnet build[/B][/CENTER]
[B][CENTER]dotnet watch run
Evet benim projem suanda sorunsuz bir şekilde çalışmış bulunmaktadır. Simdi kod kısmına geçebiliriz. Ben kod editörü olarak Rider'ı kullanıcağım. Siz arzu ederseniz Visual Studio 2022, Visual Studio Code vb kod editörlerinide kullanabilirsiniz.
Simdi bizim bu projede kullanmamız gereken önemli paketlerden biriside Microsoft.AspNetCore.DataProtection olmaktadır. Simdi bu paketi kuramız gerekiyor.
Kod:
dotnet add package Microsoft.AspNetCore.DataProtection
direk kod editörünüzdeki bir nuget eklentisi ilede bu kurulumu yapabilirsiniz. Rider için örnek kurulum;
Bu şekildede indirebilirsiniz. Ayrıca bizim suanda kurduğumuz kütüphane veya paket Asp.Net Core'da alanındaki tek üründür.
Simdi konumuza devam edelim. İlk başta bir interface oluşturalım ve kullanılması zorunlu iki tane metod oluşturalım.
Önemli Not: Microsoft.Extensions.DependencyInjection kütüphanesini kurmanız gerekiyor.
Simdi bir interface dosyası oluşturalım,
Simdi buraya iki tane metod belirticeğim. Bunlar Encrypt ve Decrypt olucaktır.
C#:
namespace TürkHacKTeamDers3;
public interface ICrypter
{
string Encrypt(string text);
string Decrypt(string text);
}
Bu aşamayı yaptıktan sonra bizim bizim provider yerine geçicek bir class oluşturmamız gerekiyor. Bu klasın ismini Crypter.cs gibi isimler koyabilirsiniz.
Ardından interface'imizi bu class'a bağlıyalım. Bundan sonra metodlarımızı oluşturalım.
Kod:
namespace TürkHacKTeamDers3;[/B][/SIZE][/CENTER]
[SIZE=5][B][CENTER]
public class Crypter : ICrypter
{
public string Encrypt(string text)
{
throw new NotImplementedException();
}
public string Decrypt(string text)
{
throw new NotImplementedException();
}
}
Bu işlemide tamamladıysak sırada bir key oluşturmak bulunuyor. Bu keyi siz istediğimiz şekilde değiştirebilirsiniz ben simdi TürkHackTeam koyucağım. Bir key oluşturmak için yeni bir değişken oluşturuyoruz. Bu keyin sabit olduğuna dikkat edin!
C#:
public const string Key = "TurkHackTeam";
Simdi Data Protection kütüphanesin provider'ını projemize dahil ediyoruz. Bunun için yazmamız gereken kodlar,
C#:
public const string Key = "TurkHackTeam";
private readonly IDataProtectionProvider _protection;
public Crypter(IDataProtectionProvider protection)
{
_protection = protection;
}
Simdi önceden belirdiğimiz iki metodu kullanışlı hale ve amaçlarına uygun hale getirelim. Bunun içinde yukarıda oluşturduğumuz protection provider'ını kullanıcağım.
C#:
using Microsoft.AspNetCore.DataProtection;
namespace TürkHacKTeamDers3;
public class Crypter : ICrypter
{
public const string Key = "TurkHackTeam";
private readonly IDataProtectionProvider _protection;
public Crypter(IDataProtectionProvider protection)
{
_protection = protection;
}
public string Encrypt(string text)
{
var koruma = _protection.CreateProtector(Key);
return koruma.Protect(text);
}
public string Decrypt(string text)
{
var koruma = _protection.CreateProtector(Key);
return koruma.Unprotect(text);
}
}
Suanda yapmamız gereken bütün metodları yaptık sırada bir Controller oluşturmaya geldi.
Klasik bir şekilde bir Controller oluşturuyoruz. Ve içerisine string Get isimli bir metod oluşturuyoruz. Ardından o metodun içerisine yapmasını istediğimiz komutları giriyorum.
C#:
using Microsoft.AspNetCore.Mvc;
namespace TürkHacKTeamDers3.Controllers;
[Route("api/[controller]")]
[ApiController]
public class CrypterController : ControllerBase
{
[HttpGet(Crypter.Key)]
public string Get(string text)
{
var service = new ServiceCollection();
service.AddDataProtection();
var mainkey = service.BuildServiceProvider();
var locker = ActivatorUtilities.CreateInstance<Crypter>(mainkey);
string sifreleme = locker.Encrypt(text);
return sifreleme;
}
}
Simdi hemen bu yaptığımız uygulamayı denemeliyiz. Terminale geliyoruz ve
Kod:
dotnet watch run
Simdi hemen deniyorum örnek olarak merhaba kelimesini şifreletsin.
Ardından bu linke gidiyoruz. https://localhost:7208/api/Crypter/TurkHackTeam?text=Merhaba.
ve gördüğünüz gibi yaptığımız encoder düzgün bir şekilde çalışmaktadır.
Umarım beğenmişsinizdir.
İyi günler dilerim sağlıcakla kalın.