|
MFC ile Temel Metin Şifreleme |
|
Gönderiliyor lütfen bekleyin... |
|
|
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 5dkdan ç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 dialoga 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_CHANGEi
seçtiğimizden emin oluyoruz. Function Handler Namei 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ü CStringdir. 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. Dialogda 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
|
|
|
-
-
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
|
|