En Güvenli ve En Çok Tercih Edilen Şifreleme Algoritmaları: AES-256, RSA-4096 ve SHA-256

Kriptografi, dijital dünyanın en önemli güvenlik bileşenlerinden biridir. Verilerin güvenli iletimi, şifrelenmesi ve doğrulanması için simetrik ve asimetrik şifreleme algoritmaları kullanılır. Aşağıda detaylandıracağımız AES-256, RSA-4096 ve SHA-256 algoritmaları, günümüzün en güvenilir şifreleme ve veri doğrulama algoritmalarıdır. Bu yazıda hem bu algoritmaların teorik bilgilerine değinecek hem de .NET Core'da kullanımını gösteren örnek kodlar vereceğiz.

AES-256 (Simetrik Şifreleme)

AES-256 (Advanced Encryption Standard), simetrik bir şifreleme algoritmasıdır ve 256 bitlik anahtar kullanarak veriyi şifreler. AES, hızlı ve güvenli yapısıyla veri güvenliğinin sağlanmasında yaygın olarak kullanılır.

Güvenlik Seviyesi

AES-256’nın güvenliği son derece yüksektir. Bilinen saldırı yöntemlerine karşı oldukça dirençlidir ve 256 bit uzunluğundaki anahtarıyla pratik olarak kırılması imkansızdır.

.NET Core’da AES-256 Kullanım Örneği

Aşağıdaki örnek, bir metni AES-256 ile şifreleme ve şifre çözme işlemlerini göstermektedir:

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

public class AES256Encryption
{
    private static readonly string key = "your-256-bit-secret-key-should-be-32-chars-long!";

    public static string Encrypt(string plainText)
    {
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = Encoding.UTF8.GetBytes(key);
            aesAlg.IV = aesAlg.Key.Take(16).ToArray(); // AES-256 uses a 16-byte IV

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

            using (MemoryStream msEncrypt = new MemoryStream())
            {
                using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(plainText);
                    }
                    return Convert.ToBase64String(msEncrypt.ToArray());
                }
            }
        }
    }

    public static string Decrypt(string cipherText)
    {
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = Encoding.UTF8.GetBytes(key);
            aesAlg.IV = aesAlg.Key.Take(16).ToArray();

            ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

            using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText)))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        return srDecrypt.ReadToEnd();
                    }
                }
            }
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        string originalText = "Bu bir AES-256 şifreleme örneğidir.";
        
        // Şifreleme
        string encryptedText = AES256Encryption.Encrypt(originalText);
        Console.WriteLine($"Şifrelenmiş Metin: {encryptedText}");

        // Şifre Çözme
        string decryptedText = AES256Encryption.Decrypt(encryptedText);
        Console.WriteLine($"Çözülmüş Metin: {decryptedText}");
    }
}

Bu kodda:

  • Encrypt metodu ile düz metin şifrelenir.
  • Decrypt metodu ile şifrelenmiş metin çözülür.

RSA-4096 (Asimetrik Şifreleme)

RSA-4096 (Rivest–Shamir–Adleman), asimetrik bir şifreleme algoritmasıdır ve 4096 bitlik anahtar uzunluğu kullanır. Asimetrik şifreleme iki anahtar kullanır: bir açık (public) anahtar ve bir gizli (private) anahtar. Bu iki anahtar, birbirine bağlıdır ve biriyle şifrelenen veriler, yalnızca diğer anahtarla çözülebilir.

Güvenlik Seviyesi

RSA-4096'nın güvenliği, anahtar uzunluğuna bağlıdır ve oldukça yüksek güvenlik sunar. RSA’nın kırılması pratik olarak mümkün değildir ve yüksek güvenlik gereksinimlerinde tercih edilir.

.NET Core’da RSA-4096 Kullanım Örneği

RSA-4096 algoritmasını kullanarak şifreleme ve şifre çözme işlemleri şu şekilde yapılabilir:

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

public class RSA4096Encryption
{
    private static RSAParameters _privateKey;
    private static RSAParameters _publicKey;

    public static void GenerateKeys()
    {
        using (RSA rsa = RSA.Create(4096))
        {
            _privateKey = rsa.ExportParameters(true);
            _publicKey = rsa.ExportParameters(false);
        }
    }

    public static byte[] Encrypt(string plainText)
    {
        using (RSA rsa = RSA.Create())
        {
            rsa.ImportParameters(_publicKey);
            return rsa.Encrypt(Encoding.UTF8.GetBytes(plainText), RSAEncryptionPadding.OaepSHA256);
        }
    }

    public static string Decrypt(byte[] cipherText)
    {
        using (RSA rsa = RSA.Create())
        {
            rsa.ImportParameters(_privateKey);
            return Encoding.UTF8.GetString(rsa.Decrypt(cipherText, RSAEncryptionPadding.OaepSHA256));
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        string originalText = "Bu bir RSA-4096 şifreleme örneğidir.";

        // Anahtarları oluştur
        RSA4096Encryption.GenerateKeys();
        
        // Şifreleme
        byte[] encryptedData = RSA4096Encryption.Encrypt(originalText);
        Console.WriteLine($"Şifrelenmiş Veri (Base64): {Convert.ToBase64String(encryptedData)}");

        // Şifre Çözme
        string decryptedText = RSA4096Encryption.Decrypt(encryptedData);
        Console.WriteLine($"Çözülmüş Veri: {decryptedText}");
    }
}

Bu örnekte:

  • GenerateKeys metodu, RSA anahtar çiftini oluşturur.
  • Encrypt metodu, düz metni açık anahtar kullanarak şifreler.
  • Decrypt metodu, şifrelenmiş veriyi özel anahtar kullanarak çözer.

SHA-256 (Hash Fonksiyonu)

SHA-256 (Secure Hash Algorithm 256), bir hash fonksiyonudur. Veriyi şifrelemek yerine, veriden sabit uzunlukta bir özet (hash) oluşturur. Hash işlemleri genellikle veri bütünlüğünü doğrulamak için kullanılır.

Güvenlik Seviyesi

SHA-256, çakışma saldırılarına karşı oldukça dayanıklıdır ve blok zincirleri (blockchain) gibi uygulamalarda kullanılarak güvenilirliğini kanıtlamıştır.

.NET Core’da SHA-256 Kullanım Örneği

Aşağıda, SHA-256 ile bir metnin hash’inin nasıl oluşturulacağını gösteren bir örnek bulunmaktadır

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

public class SHA256Hashing
{
    public static string ComputeHash(string plainText)
    {
        using (SHA256 sha256 = SHA256.Create())
        {
            byte[] bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(plainText));

            StringBuilder builder = new StringBuilder();
            foreach (byte b in bytes)
            {
                builder.Append(b.ToString("x2"));
            }
            return builder.ToString();
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        string originalText = "Bu bir SHA-256 hash fonksiyonu örneğidir.";

        // Hash Hesaplama
        string hashValue = SHA256Hashing.ComputeHash(originalText);
        Console.WriteLine($"SHA-256 Hash Değeri: {hashValue}");
    }
}

Bu kodda:

  • ComputeHash metodu, verilen düz metnin hash’ini hesaplar ve hexadecimal formatta çıktısını döner.

Sonuç

Bu yazıda, en güvenli ve en çok tercih edilen kriptografik algoritmalardan olan AES-256, RSA-4096 ve SHA-256’nın .NET Core'da nasıl kullanılabileceğini örnek kodlarla açıkladık. Her bir algoritmanın güvenlik seviyeleri, performans özellikleri ve kullanım alanları detaylıca incelendi. Bu örnekleri projelerinde kullanarak veri güvenliğini sağlayabilirsin.