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.