Einzelnen Beitrag anzeigen
Alt 27.03.06, 12:01   #24 (permalink)
xsheep
 
Registriert seit: 29.01.06
xsheep Leistung: Facit NTK
Likes: 0
Standard

Meine Version ist in C++ geschrieben und kann Files in Caesar ver- und enschlüsseln :]

edit: Hab noch eine Analyse-Funktion eingebaut, mit der man den Schlüssel einer Datei bestimmen kann

Code:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int erkennen(string pfad){
    
    ifstream in;
    
    int out;
    int e_text;
    int temp=0;
    int zaehler=0;
    int e_deutsch=4;
    int text[26]={0};
    
    char zeichen;
    
    in.open(pfad.c_str(), ios_base::in);
        
    while(in.get(zeichen)){
                                
                                if(zeichen>96&&zeichen<123){
                                                            
                                                            text[zeichen-97]++;
                                                            zaehler++;
                                                                  
                                }else if(zeichen>64&&zeichen<91){
                                      
                                      text[zeichen-64]++;
                                      zaehler++;
                                            
                                }else{
                                      
                                }
                                
    }
          
    for(int i=0; i<=25; i++){
            
            if(temp<text[i]){
                             
                             temp=text[i];
                             e_text=i;
                             
            }
                  
    }
          
    if(e_text>=e_deutsch){
                          
                          out=e_text-e_deutsch;
                          
    }else{
          
          out=26-(e_deutsch-e_text);
             
    }
    
    in.close();
    
    return out;
    
}

int verschieben(char input, int inkey){
    
    int output;
    
    if(input>64&&input<91){
                           
                           if(input+inkey>90){
                                                     
                                                     output=(input+inkey)-26;
                                                     
                           }else{
                                 
                                 output=input+inkey;
                                                                   
                           }
                                                             
    }else if(input>96&&input<123){
          
          if(input+inkey>122){
                                       
                                       output=(input+inkey)-26;
                                                                   
          }else{
                
                output=input+inkey;
                                            
          }
                                      
    }else{
          
          output=input;
                                      
    }
    
    return output;
    
}

int main(){
    
    ifstream dat_ein;
    ofstream dat_aus; 
    
    string pfad;
    string crypt;
    string prefix;
    
    char key;
    char zeichen;
    char zeichen_crypt;
    
    int verschiebung;
    int modus;
    
    bool add;
    bool autom;

    cout << endl;
    cout << "--------------------------------" << endl;
    cout << "Ceasar-Verschl\x81 \bsselung by xsheep" << endl;
    cout << "--------------------------------" << endl;
    cout << "Wollen sie verschl\x81 \bsseln (1) oder entschl\x81 \bsseln (2) ? ";
    cin >> modus;
    
    if(modus==2){
                 
                 prefix="ent";
                 add=true;
                 
    }else{
          
          prefix="ver";
          add=false;
          
    }
    
    cout << "Bitte geben sie den Pfad des zu " << prefix << "schl\x81 \bsselnden Files ein : ";
    cin >> pfad;
    
    if(add){
            
            cout << "Wollen sie den Schl\x81 \bssel manuell eingeben (1) " << endl << "oder wollen Sie den Schl\x81 \bssel automatisch bestimmen lassen (2) ?" << endl;
            cin >> modus;
            
            if(modus==2){
                         
                         verschiebung=erkennen(pfad.c_str());
                         key=verschiebung+64;
                         verschiebung=26-verschiebung;
                         cout << "Ermittelter Schl\x81 \bssel : " << key << endl;
                         autom=true;
                         
            }else{
                  
                  autom=false;
                  
            }
            
            if(!autom){
                       
                       cout << "Bitte geben sie den Schl\x81 \bssel ein (A-X) : ";
                       cin >> key;
                       
            }
            
    }else{
          
    cout << "Bitte geben sie den Schl\x81 \bssel ein (A-X) : ";
    cin >> key;
    
    }
    
    if(add&&!autom){
            
            if(key>96&&key<123){
                                
                                verschiebung=26-(key-96);
                                
            }else if(key>64&&key<91){
                  
                  verschiebung=26-(key-64);
                  
            }else{
                  
                  verschiebung=1;
                  
            }
            
    }else if(!add){
          
          if(key>96&&key<123){
                              
                              verschiebung=key-96;
                              
          }else if(key>64&&key<91){
                
                verschiebung=key-64;
                
          }else{
                
                verschiebung=1;
                  
          }
          
    }
    
    dat_ein.open(pfad.c_str(), ios_base::in);
    dat_aus.open(pfad.c_str(), ios_base::in);
    
    if(!dat_ein||!dat_aus){
                     
                 cout << "File '" << pfad << "' konnte nicht ge\x94 \bffnet werden. Programm wird abgebrochen." << endl;
                 return -1;
                 
    }else{
          
          cout << "File wird gelesen und " << prefix << "schl\x81 \bsselt ..." << endl;
          
          while(dat_ein.get(zeichen)){
                                      
                                      zeichen_crypt=verschieben(zeichen,verschiebung);
                                      dat_aus << zeichen_crypt;
                                              
          }
          
          cout << "File erfolgreich " << prefix << "schl\x81 \bsselt. Programm wird beendet." << endl;
          cout << "--------------------------------";
          
    }

    dat_ein.close();
    dat_aus.close();
    
    return 0;
    
}
xsheep ist offline   Mit Zitat antworten
 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61