Asp.Net Core 6 ile Encoder yapın.

Nonantiy

Moderasyon Ekibi Lider Yardımcısı
28 Haz 2020
1,983
1,079
Kayseri
8BfzfS111434df5fdd155e.md.png

İyi günler dilerim Türk Hack Team ailesi.
Bugün sizlerle beraber Dotnet 6 ile encoder yapıcağız.
0*SmNFyewmQWuwUTQH.png

Encoder nedir?
6OfL8I.gif

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.
unknown.png

Encoder yapımına başlıyalım.
6OfL8I.gif

İlk başta yeni bir proje oluşturarak başlayalım.
C#:
dotnet new webapi
unknown.png

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

unknown.png

unknown.png


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.
unknown.png

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 terminale bu komudu yazarsanızda indirirsiniz veya,

direk kod editörünüzdeki bir nuget eklentisi ilede bu kurulumu yapabilirsiniz. Rider için örnek kurulum;
unknown.png

unknown.png

unknown.png

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,
unknown.png

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);
}
unknown.png

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.
unknown.png

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();
    }
}

unknown.png

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";

unknown.png

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;
    }
unknown.png

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.
unknown.png

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);   
    }
}
Buradaki yaptığım şey aslında çok ama çok basit. İlk başta nasıl bir key kullanarak şifrelemesi gerektiğini öğretim ardından DataProtection kütüphanesi yardımı ile bu işlemi kısaltım. Zaten aşağıda bu kütüphane olmadan nasıl şifreleme mekanizması yapacağınızdanda bahsedeceğim.
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;
        }
    }
unknown.png

Simdi hemen bu yaptığımız uygulamayı denemeliyiz. Terminale geliyoruz ve
Kod:
dotnet watch run
komudunu çalıştırıyoruz.
unknown.png

unknown.png

Simdi hemen deniyorum örnek olarak merhaba kelimesini şifreletsin.


unknown.png


unknown.png
unknown.png

unknown.png

Ardından bu linke gidiyoruz. https://localhost:7208/api/Crypter/TurkHackTeam?text=Merhaba.
unknown.png

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.
 

'Chan

Uzman üye
1 Nis 2020
1,802
1,460
Shibuya
Ellerine sağlık hocam. Bence herhangi bir değişiklik yapılması gereken yer bulunmuyor. Görsellik açısından da güzel duruyor...
 

cyber knight

Katılımcı Üye
30 Ağu 2021
710
437
Root@Cyberknight
8BfzfS111434df5fdd155e.md.png

İyi günler dilerim Türk Hack Team ailesi.
Bugün sizlerle beraber Dotnet 6 ile encoder yapıcağız.
0*SmNFyewmQWuwUTQH.png

Encoder nedir?
6OfL8I.gif

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.
unknown.png

Encoder yapımına başlıyalım.
6OfL8I.gif

İlk başta yeni bir proje oluşturarak başlayalım.
C#:
dotnet new webapi
unknown.png

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]
[B][CENTER][B][CENTER]dotnet watch run


unknown.png

unknown.png


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.
unknown.png

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 terminale bu komudu yazarsanızda indirirsiniz veya,

direk kod editörünüzdeki bir nuget eklentisi ilede bu kurulumu yapabilirsiniz. Rider için örnek kurulum;
unknown.png

unknown.png

unknown.png

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,

unknown.png


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);

}

unknown.png


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.

unknown.png


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][/B][/SIZE][/COLOR][/B][/CENTER]
[B][COLOR=rgb(255, 255, 255)][SIZE=5][B]
[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();

    }

}


unknown.png


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";



unknown.png


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;

    }

unknown.png


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.
unknown.png



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);   
    }
}
Buradaki yaptığım şey aslında çok ama çok basit. İlk başta nasıl bir key kullanarak şifrelemesi gerektiğini öğretim ardından DataProtection kütüphanesi yardımı ile bu işlemi kısaltım. Zaten aşağıda bu kütüphane olmadan nasıl şifreleme mekanizması yapacağınızdanda bahsedeceğim.
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;
        }
    }
unknown.png

Simdi hemen bu yaptığımız uygulamayı denemeliyiz. Terminale geliyoruz ve
Kod:
dotnet watch run
komudunu çalıştırıyoruz.
unknown.png

unknown.png

Simdi hemen deniyorum örnek olarak merhaba kelimesini şifreletsin.


unknown.png


unknown.png
unknown.png

unknown.png

Ardından bu linke gidiyoruz. https://localhost:7208/api/Crypter/TurkHackTeam?text=Merhaba.
unknown.png

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.
Elinize emeğinize sağlık hocam çok güzel bir konu olmuş .
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.