| 
                
             | 
        
        
            
                
                    
                        | 
                            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
                         
                     
                 
                
                
             | 
        
        
            | 
                
             |