Merhaba Webkolog okuyucuları!
Günümüzde veri güvenliği, yazılım geliştirmenin en önemli konularından biri. Uygulamalarımızda hassas verileri saklarken veya aktarırken, bu verilerin yetkisiz erişime karşı korunması kritik bir rol oynuyor. Bugün sizlerle C# .NET Framework 4 ve Microsoft Visual Studio 2010 kullanarak XOR algoritmasıyla basit bir dosya şifreleme ve şifre çözme mekanizması nasıl oluşturacağımızı inceleyeceğiz.
Unutmayın, burada anlatacağım yöntem basit bir başlangıç içindir ve çok yüksek güvenlik gerektiren projelerde kullanılmamalıdır. Bu, XOR algoritmasının nasıl çalıştığını ve dosya işlemleriyle nasıl birleştirilebileceğini anlamanıza yardımcı olacak temel bir örnektir. Gerçek dünya uygulamalarında genellikle AES (Advanced Encryption Standard) gibi endüstri standardı şifreleme algoritmaları tercih edilir.
XOR Şifrelemesi Nedir?
XOR (Exclusive OR), ikili (binary) bir mantık işlemidir. İki girişin birbirinden farklı olması durumunda true (veya 1), aynı olması durumunda false (veya 0) döndürür. Şifreleme bağlamında, XOR'un en önemli özelliği, aynı anahtarla iki kez uygulandığında orijinal veriyi geri vermesidir:
- A XOR B = C
- C XOR B = A (yani, (A XOR B) XOR B = A)
Bu özelliği sayesinde, aynı XOR anahtarını kullanarak hem şifreleme hem de şifre çözme işlemini yapabiliriz.
Dosya Şifreleme Mekanizması
Şimdi, bu basit XOR mantığını bir dosyayı şifrelemek için nasıl kullanacağımıza bakalım. Öncelikle, bir anahtar belirleyeceğiz ve bu anahtarın karakterlerinin ASCII/Unicode değerlerini toplayarak tek bir XOR değeri elde edeceğiz. Ardından, dosyanın her bir baytını bu XOR değeriyle işleyeceğiz.
Şifreleme Kodu
Aşağıdaki kodu, bir Windows Forms uygulamasında (örneğin, bir buton tıklamasına) veya bir konsol uygulamasında kullanabilirsiniz:
using System;
using System.IO; // Dosya işlemleri için gerekli
public class FileEncryptorDecryptor
{
// Şifreleme/çözme anahtarı
private string anahtar = "Webkolog"; // Lütfen bu anahtarı daha karmaşık ve güvenli yapın!
// Anahtardan elde edilen XOR değeri
private int xorDegeri;
public FileEncryptorDecryptor()
{
// Anahtarın karakter değerlerinin toplamını alarak XOR değerini hesapla
xorDegeri = 0;
for (int i = 0; i < anahtar.Length; i++)
{
xorDegeri = xorDegeri + (int)(anahtar[i]);
}
}
///
Bu kod parçası, FileStream kullanarak kaynak dosyayı bayt bayt okur ve her baytı hesapladığımız xorDegeri ile XOR işlemine tabi tutar. Sonucu da yeni bir hedef dosyaya yazar.
Dosya Şifre Çözme Mekanizması
XOR'un bahsettiğim (A XOR B) XOR B = A özelliğinden dolayı, şifre çözme işlemi için tamamen aynı algoritmayı ve aynı anahtarı kullanacağız. Şifreleme ile aynı mantıkla, şifrelenmiş dosyanın her baytını aynı XOR değeriyle tekrar işleyerek orijinal veriye ulaşacağız.
Şifre Çözme Kodu
Şifre çözme metodu da FileEncryptorDecryptor sınıfının içine eklenebilir:
using System;
using System.IO;
using System.Windows.Forms; // MessageBox için gerekli
public class FileEncryptorDecryptor
{
// ... (yukarıdaki anahtar ve xorDegeri tanımlamaları aynı kalır) ...
public FileEncryptorDecryptor()
{
// Anahtarın karakter değerlerinin toplamını alarak XOR değerini hesapla
xorDegeri = 0;
for (int i = 0; i < anahtar.Length; i++)
{
xorDegeri = xorDegeri + (int)(anahtar[i]);
}
}
// ... (SifreleDosya metodu da yukarıdaki gibi aynı kalır) ...
///
Kullanım Örneği
Bu sınıfları projenizde nasıl kullanacağınızı göstermek için basit bir konsol uygulaması örneği:
class Program
{
static void Main(string[] args)
{
// Dosya yolu örnekleri (kendi bilgisayarınızdaki yolları kullanın)
string orijinalDosya = "C:\\test\\orijinal.txt";
string sifreliDosya = "C:\\test\\sifreli.enc";
string cozulmusDosya = "C:\\test\\cozulmus.txt";
// FileEncryptorDecryptor sınıfının bir örneğini oluştur
FileEncryptorDecryptor encryptor = new FileEncryptorDecryptor();
// Dosyayı şifrele
Console.WriteLine("Dosya şifreleniyor...");
encryptor.SifreleDosya(orijinalDosya, sifreliDosya);
Console.WriteLine("Şifreleme tamamlandı.");
Console.WriteLine("\nDosya çözülüyor...");
// Şifreli dosyayı çöz
encryptor.CozumleDosya(sifreliDosya, cozulmusDosya);
Console.WriteLine("Şifre çözme tamamlandı.");
Console.ReadLine(); // Konsolun kapanmaması için
}
}
Bu örnekte, C:\test\ klasöründe orijinal.txt adında bir dosyanız olduğunu varsayıyorum. Uygulama, bu dosyayı şifreleyip sifreli.enc olarak kaydedecek, ardından sifreli.enc dosyasını çözüp cozulmus.txt olarak kaydedecektir. orijinal.txt ve cozulmus.txt dosyalarının içeriği aynı olmalıdır.
Önemli Güvenlik Notları
Tekrar belirtmek isterim ki, bu XOR tabanlı şifreleme yöntemi basittir ve yüksek güvenlik gerektiren durumlar için uygun değildir. Sebepleri:
- Tekrarlayan Anahtar: Her bayt aynı anahtarla işlenir, bu da frekans analizi gibi basit yöntemlerle şifrenin kırılmasını kolaylaştırır.
- Anahtar Yönetimi: Anahtarın kodun içinde sabit olması, anahtarın kolayca ele geçirilmesine neden olabilir.
- Hash/Salt Yok: Şifreleme anahtarının türetilmesinde veya verinin doğruluğunu kontrol etmede herhangi bir hash veya salt kullanılmaz.
Gerçek dünya uygulamalarında, .NET Framework'ün sunduğu System.Security.Cryptography namespace'i altındaki AES (Advanced Encryption Standard), RSA gibi güçlü algoritmaları kullanmanız şiddetle tavsiye edilir. Bu algoritmalar çok daha karmaşık matematiksel işlemler kullanır ve anahtar yönetimi için daha güvenli yöntemler sunar.
Umarım bu makale, dosyaları temel seviyede nasıl şifreleyip çözebileceğiniz konusunda size bir başlangıç noktası sunmuştur. Veri güvenliği konusunda daima en güncel ve güçlü algoritmaları araştırmayı ve kullanmayı unutmayın!
Webkolog'u takipte kalın!
Hepinize bol kodlu ve güvenli projeler dilerim!
0 yorum:
Yorum Gönder