Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Talha Orak
Talha Orak
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
2 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C++ / C++.NET Talha Orak
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C++ / C++.NET
Yayınlanma Tarihi : 22.8.2003
Okunma Sayısı : 31892
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 24.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 24.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 24.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 24.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
MFC ile Temel Metin Şifreleme
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Metin şifrelemenin en basit yollarını ele alacağımız bu yazıda anlatılacak metodun temelinde; metindeki her karakteri sistematik olarak başka bir karakterle yerdeğiştirme vardır. Bu yerdeğiştirme işlemi, karakterlerin sayı değerleri(ASCII) üzerinde yapılan işlemler vasıtasıyla olur. Bizim tercihimiz; metnin her bir karakterini şifre karakteri ile XOR işlemine tabi tutmaktır. Aşağıda bit düzeyindeki XOR işleminin doğruluk tablousu görülmektedir. C dilindeki XOR operatörü ’^’ karakteridir.
Orjinal Karakter(ASCII) Şifre Metod Şifrelenmiş Karakter(ASCII)
A(65) 3 Toplama D(65+3)
e(101) 66 Çıkarma #(101-66)

^ (XOR İşlemi) 1 0
1 0 1
0 1 0
 

 



Karakterleri şifrelerken XOR işlemini seçmemizin birkaç nedeni vardır. Şifrelenmiş karakteri şifre ile tekrar XOR işlemine sokarak orjinal karakteri elde edebilmemiz nedenlerden biridir. Diğer bir neden ise şifrelerken taşma olmamasıdır. Yani bir karakterin ascii nosu ile başka bir karakterin ascii nosunu XOR işlemine tabi tutarsak -ki burda 0-255 arası sayılardan söz ediyoruz- sonuç yine 0-255 arası bir sayı, yani başka bir karakterin ascii nosudur. Şifre olarak 8-bitlik bir karakter kullandığımız için bu, 8-bitlik bir şifrelemedir. Yani şifremiz 256 ihtimalden oluşur, ki bu anneannemin 486DX bilgisayarı ile 5dk’dan çabuk kırılabilir. Daha güvenli şifreleme yollarından ileriki yazılarımda bahsedeceğim. Birazdan kodlarını vereceğimiz bu şifreleme programından fazla bişi beklememenizi, programın metinlerinizi, sadece "direk bakışlardan" korumakta kullanılabileceğini belirtmiş olalım. Alttaki küçük konsol programı kodlarını yardımcı uygulama olarak yazıp kullanabilirsiniz.

Basit şifreleme/deşifreleme

#include<stdio.h>
FILE *giris;
FILE *cikis;
char gdAdi[255];
char cdAdi[10]="cikis.txt";
char sifre=0;
int main()
{
  char harf;
  printf("Metin: ");
  scanf("%s",gdAdi);
  giris = fopen(dAdi,"r");
  printf("Şifre: ");
  scanf("%d",&sifre);
  cikis = fopen(cdAdi,"w");
  while(!feof(giris))
  {
    harf = getc(giris);
    harf ^= sifre;
    putc(harf,cikis);
  }
  fclose(cikis);
  fclose(giris);
  return 0;
}


char->ascii

#include<stdio.h>
int main()
{
   char harf;
   scanf("%c",&harf);
   printf("%d",harf);
   return 0;
}

ascii->char

#include<stdio.h>
int main()
{
   int ascii;
   scanf("%d",&ascii);
   printf("%c",ascii);
   return 0;
}

 

Kullanılacak Değişkenler
CString metin;
CString xmetin;
UINT sifre;
CEdit metinKutusu;
CEdit xmetinKutusu;
CEdit sifreKutusu;
CButton dosyaAc;
CButton dosyaKaydet;
CButton cikis;

 MFC Wizard kullanarak Dialog tabanlı bir uygulama oluşturuyoruz. Ana dialogta hazır eklenmiş bulunan yazıları ve düğmeleri siliyoruz. Dialoga üç adet Edit Control ekliyoruz. Bunlardan birincisi orjinal metni, ikincisi ise şifrelenmiş metni içermektedir. Yani metin kontrolü için bu iki kontrolü kullanmaktayız. Bu iki kontrolün özelliklerinden "Multi Line=true", "Vertical Scroll= true" ve "Want Return=true" olarak belirlenmelidir. Birinci metni değiştirdiğimizde, o ana kadar yazdığımız metnin, şifrelenerek ikinci metne aktarılmasını istiyoruz. Bunu sağlamak için de birinci CEdit kontrolünün EN_UPDATE mesajını işleyecek bir fonksiyon yazmalıyız. Dialogtan türemiş olan sınıfın değişkenleri kısmına sağ taraftaki değişkenleri kullanıyoruz. Fakat metin kutularını ve düğmeleri resource editorle oluşturduğumuz için CEdit ve CButton türündeki değişkenleri eklememize gerek yok. 




  Metin kutusundaki yazıyı CString türündeki metin değişkenine atmak için bu dialogun herhangi bir üye fonksiyonu içinde: 

this->GetDlgItemText(metinKutusu,metin);

fonksiyonunu kullanmalıyız. Fakat bu yazıyı otomatik olarak bir değişkene atmak işimizi kolaylaştıracaktır. Bunu yapmak için DDX/DDV desteğini kullanmalıyız. metinKutusu isimli dialog’a sağ tıklayarak Add Variable’ı seçerek altta sağda görülen değişken ekleme dialogunu açıyoruz. Ve buradaki Category değerini Value olarak değiştiriyor ve Variable name kutusuna metin yazıyoruz. 




  Finish düğmesine tıkladıktan sonra aynı işlemi xmetinKutusu ve sifreKutusu için, değişken isimleri sırasıyla xmetin ve UINT türünde sifre olmak kaydıyla tekrarlıyoruz. Dialoglara değişkenler atadıktan sonra, sağ tarafta görüldüğü gibi metinKutusuna sağ tıklayarak açılan menüden Add Event Handler’ı seçiyoruz. Açılan dialogtaki Message Type adı altındaki listeden EN_CHANGE’i seçtiğimizden emin oluyoruz. Function Handler Name’i olduğu gibi kabul ederek Add and Edit Code düğmesine tıklıyoruz.



  Böylece tek yapmamız gereken şey Event Handler’ın otomatik eklediği OnEnChangeMetin() fonksiyonu ile ilgilenmek. Bu fonksiyonun, orjinalMetnin bütün karakterlerini alarak, sifre değişkeni ile XOR yapmasını ve bu karakterleri xmetin değişkenine atmasını, dolayısıyla xmetinKutusu içerisinde görüntülemesini istiyoruz. Yukarıda görülen değişken ekleme işlemi ile bir kontrole değişken ekledikten sonra, programın herhangi bir yerinde, bu değişkenin değerinin kontrolden alınarak güncellenmesini istediğimiz zaman UpdateData(TRUE); fonksiyonunu kullanırız. Fakat biz değişkenden değeri alarak, kontrolü güncellemek istersek UpdateData(FALSE); fonksiyonunu kullanmalıyız. metinKutusu ve xmetinKutusu kontrollerine atadığımız değişkenlerin türü CString’dir. CString türünde bir değişken üzerinde karakter bazında işlem yapmak istersek, CString sınıfının CString::GetAt(); ve CString::SetAt(); fonksiyonlarını kullanırız. Bu fonksiyonlar, parametre olarak verilen sayıyı karakter dizisinde indeks kabul eder ve bu indeksteki karakteri döndürür/değiştirirler. Ayrıca metin değişkeninin kaç karakterden oluştuğunu bulmak için, CString sınıfının GetLength();  işlevini kullanırız. Şimdi metinKutusu kontrolünün, onEnChangeMetin() isimli fonksiyonunu yazmaya başlayalım.

xorSifreDlg::OnEnChangeMetin()
{
  UpdateData(TRUE);
  xmetin = metin;
  for(int a=0; a<metin.GetLength(); a++)
  {
    xmetin.SetAt(a, metin.GetAt(a)^sifre);
  }
  UpdateData(FALSE);
}

 Hepsi bu kadar! Programda birinci Edit kontrolün içine şifrelenmiş metni girerek orjinal metni elde edebilirsiniz. Dialog’da görülen dosya açma ve kaydetme özellikleri opsiyonel olup, yazıda yer vermeye gerek duymadım. Fakat programda bu özellikleri bulabilirsiniz. Hepinize iyi çalışmalar...

Örnek uygulamayı indirmek için tıklayın.

Talha Orak

Makale:
MFC ile Temel Metin Şifreleme C++ ve C++.NET dili Talha Orak
  • Yazılan Yorumlar
  • Yorum Yaz
AĞU
22
2003
şifreleme hakkında fikir vermesi bakımından, güzel bir yazı olmuş...
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor