Hackerboard WikiHaboBlog

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

kleines Verschlüsselungsprogramm

Diskussion: kleines Verschlüsselungsprogramm im Forum Programmieraufgaben, in der Kategorie Code Kitchen; frag mich nicht warum, hab mir den quellcode auch noch nicht angeschaut ^^ aber er lässt, wenn ich "wertwert" eingeb ...

Like Tree2Likes

Antwort
Alt 13.02.07, 10:54   #31 (permalink)
 
Registriert seit: 24.01.06
Janus Leistung: Facit NTK
Janus eine Nachricht über ICQ schicken
Likes: 0
Standard


frag mich nicht warum, hab mir den quellcode auch noch nicht angeschaut ^^ aber er lässt, wenn ich "wertwert" eingeb (Schlüssel 4) beim decodieren von "aivxaivx" das w einfach weg... beide male

Janus ist offline   Mit Zitat antworten
Alt 20.02.07, 12:21   #32 (permalink)
 
Registriert seit: 13.12.06
Mokel Leistung: Facit NTK
Mokel eine Nachricht über ICQ schicken
Likes: 0
Standard

Also erstmal Hi @ All
bin Neu hier und das ist mein erster Post

Ich hab mal die Caesar in C++ geschrieben ich hab jetzt erst angefangen deswegen gehts wahrscheinlich
auch viel einfacher aber es funktioniert


Edit: Ich seh gerade das es manchmal abstürzt
Angehängte Dateien
Dateityp: rar Caesar.rar (5,2 KB, 76x aufgerufen)
Mokel ist offline   Mit Zitat antworten
Alt 07.01.08, 23:01   #33 (permalink)
 
Registriert seit: 03.11.07
satan92 Leistung: Facit NTK
Likes: 0
Standard

Hi, ich hab das ganze noma in c++ geschrieben, man kann die Datein und den Schluessel auch als argumente über die bash / cmd mit auf den weg geben weil ich im mom noch eine grafische "Oberfläche" dazu schreib und ich habe statt dem verschieben modulo genommen aber wenn man die ^ durch + / - ersätzt leufts aufs gleiche raus.
Einziges Problem ist das keine größeren datein gehen weil der long int der die datei größe "zählt" sonst platzt das muss ich noch umschreiben.
//auf win getestet sollte aber uebertragbar sein
Code:
#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

void replace(string& text,const string& fnd,const string& rep) 
{ 
  size_t pos = text.find(fnd); 
  while(pos!=string::npos) 
  { 
    text.replace(pos,pos+fnd.length(),rep); 
    pos = text.find(fnd,pos); 
  } 
}

unsigned long int lof(ifstream &f){     //Length Of File
unsigned long int d; 
f.seekg(0,ios::end);    //Zeiger ans Ende der Datei setzen 
d=f.tellg();            //Position des Zeigers auslesen  
f.seekg(0,ios::beg);    //Zeiger zum Anfang der Datei setzen  
return(d);
}



void fencrypt(std::ifstream& srcfile,std::ofstream& dstfile,char *key,bool log, const char *datei)
{
//cout<<"void";
int keypos = 0, strpos = 0,i,f;
char buf, str[lof(srcfile)+1000000];
cout<<"while";
while(!srcfile.eof())
{
str[strpos] = srcfile.get();
strpos++;
//cout<<"sa";
}
cout<<strpos;
cout<<" bytes zu verschluesseln\n";
f=strpos;
str[strpos] = '\0'; strpos = 0;
srcfile.close();
//cout<<str[strpos+1];
i=0;
while(i<f)
{
//cout<<"while";
if(key[keypos] == '\0') keypos = 0;
buf = key[keypos];
if(log){std::cout << "Verschluessel  \"" << str[strpos] << "\" mit  \"" << buf <<"\": ";}
//+
str[strpos] ^= (int)buf;
if(log){std::cout << str[strpos] <<std::endl;}
dstfile.put(str[strpos]);
strpos++; keypos++;i++; 
}
}














void fcrypt(std::ifstream& srcfile,std::ofstream& dstfile,char *key,bool log, const char *datei)
{
//cout<<"void";
int keypos = 0, strpos = 0,i,f;
char buf, str[lof(srcfile)+1000000];
//cout<<"while";
while(!srcfile.eof())
{
str[strpos] = srcfile.get();
strpos++;
//cout<<"sa";
}
cout<<strpos;
f=strpos;
str[strpos] = '\0'; strpos = 0;
cout<<" bytes zu verschluesseln\n";
srcfile.close();
cout<<str[strpos+1];
i=0;
while(i<f)
{
//cout<<"while";
if(key[keypos] == '\0') keypos = 0;
buf = key[keypos];
if(log){std::cout << "Entschluessel  \"" << str[strpos] << "\" mit \"" << buf <<"\": ";}
//-
str[strpos] ^= (int)buf;
if(log){std::cout << str[strpos] <<std::endl;}
dstfile.put(str[strpos]);
strpos++; keypos++;i++; 
}
}











int a, b, c, d, e, falsch, u;
ifstream dat_ein;
ofstream dat_aus;
string zeile, zneu, key, dat;
//char *datei;
char datei[110], adatei[110];
char ki[10000];
string ss, sc, sh;

int main (int argc, char *argv[]){
	u=0;
	//cout<<argc;
	if(argc==4){
		u=1;
		strcpy (datei, argv[1]);
		strcpy (adatei, argv[2]);
		key=argv[3];
	}
	if(argc>1&&argc<4){
		cout<<"Der Funktionsaufruf lautet: [datei], [ausgabedatei], [schluessel]\n";
	}
	if(u==0){
	cout<<"Bls Datei Verschluesselung version 2.0\nc by Moritz Hpkt alle Rechte vorbehalten \n";
	}
	e=1;
	while(e==1){
	falsch=0;	
	if(u==0){
	cout<<"1: Verschluesseln \n2: Entschluesseln\n";
	cin>>a;
	cout<<"datei:\n";
	cin>>datei;
	cout<<"ausgabe Datei (ein und ausgabe Datei dürfen nicht indentisch sein) :\n";
	cin>>adatei;
	}
	if(strcmp(datei, adatei) == 0){
		falsch=1;
	}
	if(falsch==0){
	dat_ein.open(datei, ios::binary);
	dat_aus.open(adatei, ios::binary);
	if(u==0){
	cout<<"key: \n";
	cin>>key;
	}
	strcpy (ki, key.c_str());
	//cout<<"char";
	if(a==1){
		fencrypt(dat_ein,dat_aus,ki, false, datei);
	}
	else
	{
		fcrypt(dat_ein,dat_aus,ki, false, datei);
	}

cout<<"Vorgang erfolgreich ausgabe datei:\n";
cout<<adatei;
	}
	else
	{
		cout<<"Der Vorgang wurde abgebrochen, ein und ausgabe Datei stimmten ueber ein";
	}
if(u==0){
cout<<"\n1: Weitere Dateien ver/entschluesseln\n0: beenden\n";	
cin>>e;	
}
else
{
	e=0;
}
	}
return 0;
}

Geändert von satan92 (22.11.09 um 23:00 Uhr)
satan92 ist offline   Mit Zitat antworten
Alt 01.05.08, 23:18   #34 (permalink)
 
Registriert seit: 31.01.08
nhBps Leistung: Facit NTK
Likes: 0
Standard

Nochmal C++^^

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

using namespace std;

int main()
{

    string Klartext;
    string Geheimtext;
    int Verschieben; 
    int Auswahl;
    int Laenge;
   
    ofstream Ausgabe;
    ifstream Einlesen;
    
    string Pfad_Einlesen;
    string Pfad_Ausgabe;
    
    string Text;
    

  cout <<"1. Verschlüßeln" << endl;
  cout <<"2. Entschlüßeln" << endl;
  cin >> Auswahl;
  
  switch(Auswahl)
  {
  case 1:
  
  cout <<"Geben sie den Pfad der Datei ein, die sie Verschlüßeln wollen";
  cout <<"\n(z.B. E:\\Hallo.txt):\t";
  cin >> Pfad_Einlesen;
  
  Einlesen.open(Pfad_Einlesen.c_str());

  
  while ( !Einlesen.eof() )
  { //Solange nicht das Ende der Datei(EOF) erreicht ist 
  Klartext.push_back( Einlesen.get() ); //Hänge an der string klartext den Buchstaben, den get() liefert an
  } 
  
  cout <<"\nUnd jetzt den Pfad der Datein, wo die Verschlüßelung stehen soll: \n";
  cin >> Pfad_Ausgabe;
  
  Ausgabe.open(Pfad_Ausgabe.c_str());
  
  cout <<"\nUm wie viele Stellen wollen sie die Buchstaben Verschieben?\n";
  cin >>  Verschieben;
  
  Laenge = Klartext.length();
    
    for(int i = 0; i <= Laenge - 1 ; i++)
    {
          if(i == Laenge - 1) break;
          
          Geheimtext[i] = Klartext[i];
          Geheimtext[i] += Verschieben;
    }
    
    cout <<"Jetzt kommt die Verschlüßelung: \n\n";
    
    for(int i = 0; i <= Laenge - 1; i++)     
    {
            cout << Geheimtext[i];
            Ausgabe << Geheimtext[i] ;
    }
    
    cout << Geheimtext;
    
    Ausgabe.close();
    Einlesen.close();
    break;
    
    case 2:
         
  cout <<"Geben sie den Pfad der Datei ein, die sie Entschlüßeln wollen";
  cout <<"\n(z.B. E:\\Hallo.txt):\t";
  cin >> Pfad_Einlesen;
  
  Einlesen.open(Pfad_Einlesen.c_str());

  
  while ( !Einlesen.eof() )
  { //Solange nicht das Ende der Datei(EOF) erreicht ist 
  Klartext.push_back( Einlesen.get() ); //Hänge an der string klartext den Buchstaben, den get() liefert an
  } 
  
  cout <<"\nUnd jetzt den Pfad der Datein, wo die Verschlüßelung stehen soll: \n";
  cin >> Pfad_Ausgabe;
  
  Ausgabe.open(Pfad_Ausgabe.c_str());
  
  cout <<"\nUm wie viele Stellen wollen sie die Buchstaben zurückschieben?\n";
  cin >>  Verschieben;
  
    Laenge = Klartext.length();
    
    for(int i = 0; i <= Laenge - 1 ; i++)
    {
          if(i == Laenge - 1) break;
          
          Geheimtext[i] = Klartext[i];
          Geheimtext[i] -= Verschieben;
    }
    
    cout <<"Jetzt kommt die Verschlüßelung: \n\n";
    
    for(int i = 0; i <= Laenge - 1; i++)     
    {
            cout << Geheimtext[i];
            Ausgabe << Geheimtext[i] ;
    }
    
    cout << Geheimtext;
    
    Ausgabe.close();
    Einlesen.close();
    break;
    
   case 3:
        
  cout <<"\n(z.B. E:\\Hallo.txt):\t";
  cin >> Pfad_Einlesen;
  
  Einlesen.open(Pfad_Einlesen.c_str());

  
  while ( !Einlesen.eof() )
  { //Solange nicht das Ende der Datei(EOF) erreicht ist 
  Klartext.push_back( Einlesen.get() ); //Hänge an der string klartext den Buchstaben, den get() liefert an
  } 
  
  cout <<"\nUnd jetzt den Pfad der Datein, wo die Verschlüßelung stehen soll: \n";
  cin >> Pfad_Ausgabe;
  
  Ausgabe.open(Pfad_Ausgabe.c_str());
   
  Verschieben = 0;
  
    Laenge = Klartext.length();
    
    for(int i = 0; i <= Laenge - 1 ; i++)
    {
          
          if(i == Laenge - 1) break;
          
          Geheimtext[i] = Klartext[i];
          Geheimtext[i] -= Verschieben;
    
    }
    
    cout <<"Jetzt kommt die Verschlüßelung: \n\n";
    
    for(int i = 0; i <= Laenge - 1; i++)     
    {
            cout << Geheimtext[i];
            Ausgabe << Geheimtext[i] ;
    }
    
    cout << Geheimtext;
    
    Ausgabe.close();
    Einlesen.close();
    break;
  
   }
   
   
          
    
int ENDE;
cin >> ENDE;
return 0;
}
nhBps ist offline   Mit Zitat antworten
Alt 02.05.08, 11:08   #35 (permalink)
 
Registriert seit: 22.03.08
MontyPerl Leistung: Facit NTK
Likes: 0
Standard

caesar-einweg-verschlüsselung   
Code:
$ perl -ne 'BEGIN{map{$R{++$j}=$_;$H{$_}=$j if$j<28}(a..z)x2}chomp;for(split//){$_=$R{$H{lc()}+13};print}'

Newlines und Leerzeichen werden ignoriert. (Respektive eigentlich werden nur Newlines ignoriert, Leerzeichen werden zu "m". (13. Buchstabe des Alphabets.))
Da sag noch mal einer prel wäre linenoise!
PREL!!!1
MontyPerl ist offline   Mit Zitat antworten
Alt 08.05.08, 16:40   #36 (permalink)
 
Registriert seit: 20.03.06
lBr1anl Leistung: Facit NTK
lBr1anl eine Nachricht über ICQ schicken
Likes: 0
Standard

Ich hab' die Cäsar-Verschlüsselung mal vor 'ner Zeit zur Übung als Klasse in C++ geschrieben. Bei 'ner Verschlüsselung ohne Schlüsselangabe wird einfach die Länge des Strings als Schlüssel genommen.
Damit hab' ich mir damals Überladung von Funktionen beigebracht

Cesar.h   
Code:
#include <string>

using std::string;

///Klasse um ein einzelnes Wort mit dem Caesarchiffre zu verschluesseln

/**
* Einer Instanz dieser Klasse kann ein string uebergeben werden, welcher
* danach mithilfe der Methoden 'encode()' und 'decode()' ver- und entschluesselt
* werden kann. Nach der Instanzierung ist der String leer.
*/
class cesar
{

private:
        /// Variable, die den aktuellen string haelt.
        /**
        * Die Variable 'phrase' hält den aktuellen string, egal ob
        * verschluesselt oder unverschluesselt. In welchem Zustand sich der
        * String befindet wird in der Variable 'code_status' festgehalten
        */
        string phrase;
        /// Enthaelt die Länge der Variable 'phrase'
        int length;
        /// Unterscheidet zwischen ver- und entschluesseltem String
        /**
        * Wenn code_status den Wert 1 hat, dann ist 'string' verschluesselt
        * Wenn code_status den Wert 0 hat, dann ist 'string' entschluesselt
        */
        bool code_status;
        /// Konstanten für 'code_status'
        static const bool ENCODED = true;
        static const bool DECODED = false;

public:
       /// Setzt einen neuen Wert als string
       /**
       * Mithilfe dieser Methode kann entweder ein neuer zu verschluesselnder 
       * String angegeben werden oder aber ein zu entschluesselnder String
       */
       void setphrase(string newphrase)
       {
            phrase = newphrase;
            length = (int)phrase.length();
            code_status = DECODED;
       }

       /// Gibt den aktuellen String zurueck
       /**
       * Gibt den aktuell gespeicherten String zurueck. Ob dieser ver- oder
       * entschluesselt ist, kann mithilfe der Methode isencoded() abgefragt
       * werden.
       */
       string getphrase()
       {
              return phrase;
       }

       /// Liefert den Status des Strings zurueck
       /**
       * Gibt den aktuellen Kodierungsstatus des Strings zurueck,
       * der mithilfe der Methode getphrase() abgefragt werden kann.
       */
       bool isencoded()
       {
        return code_status;
       }

       /// Verschluesselt den aktuellen String
       /**
       * Wird kein Schluesselwert in Form
       * eines Integers uebergeben, so wird die Laenge des Strings als
       * Schluesselwert benutzt. Ausserdem wird ueberprueft, ob der String
       * bereits als verschluesselter Text vorliegt. Ist dies der Fall, so
       * bleibt dieser unveraendert. Somit kann keine doppelte Verschluesse-
       * lung realisiert werden.
       */
       void encode()
       {
        if(code_status==DECODED)
        {
          int ASCII[255];
          int newASCII;
          
          for (int recentLetter=1; recentLetter<=length; recentLetter++)
          {
              // Array mit ASCII-Werten der Zeichen fuellen
              ASCII[recentLetter-1]=(int)phrase[recentLetter-1];
          }
          
          for (int recentLetter=1; recentLetter<=length; recentLetter++)
          {
              // Wenn es sich um einen Buchstaben handelt, wird er verschluesselt
              if((ASCII[recentLetter-1]>96
                 &&ASCII[recentLetter-1]<123)
                 ||(ASCII[recentLetter-1]>64
                 &&ASCII[recentLetter-1]<91))
              newASCII = ASCII[recentLetter-1]+length;
              // Ansonsten wird nichts veraendert
              else newASCII = ASCII[recentLetter-1];
              // Fängt ASCII-Werte groesser als Z/z ab und beginnt
              // wieder bei A/a
              // Wenn es sich um Kleinbuchstaben handelt, ist 122 der Grenzwert
              if(ASCII[recentLetter-1]>96
                 &&ASCII[recentLetter-1]<123
                 &&newASCII>122)
                               newASCII=newASCII-26;
              // Wenn es sich um Kleinbuchstaben handelt, ist 90 der Grenzwert
              if(ASCII[recentLetter-1]>64
                 &&ASCII[recentLetter-1]<91
                 &&newASCII>90)
                               newASCII=newASCII-26;
              // ASCII-Wert wird wieder in Char umgewandelt
              phrase[recentLetter-1]=(char)newASCII;
          }
          code_status = ENCODED;
        }
       }

       /// Entschluesselt den aktuellen String
       /**
       * Wird kein Schluesselwert in Form
       * eines Integers uebergeben, so wird die Laenge des Strings als
       * Schluesselwert benutzt. Ausserdem wird ueberprueft, ob der String
       * bereits als entschluesselter Text vorliegt. Ist dies der Fall, so
       * bleibt dieser unveraendert. Somit kann keine doppelte Entschluesse-
       * lung realisiert werden.
       */
       void decode()
       {
        if(code_status==ENCODED)
        {
          int ASCII[255];
          int newASCII;
          for (int recentLetter=1; recentLetter<=length; recentLetter++)
          {
              // Array mit ASCII-Werten der Zeichen füllen
              ASCII[recentLetter-1]=(int)phrase[recentLetter-1];
          }
          for (int recentLetter=1; recentLetter<=length; recentLetter++)
          {
              // Wenn es sich um einen Buchstaben handelt, wird er verschluesselt
              if((ASCII[recentLetter-1]>96
                 &&ASCII[recentLetter-1]<123)
                 ||(ASCII[recentLetter-1]>64
                 &&ASCII[recentLetter-1]<91))
              newASCII = ASCII[recentLetter-1]-length;
              // Ansonsten wird nichts veraendert
              else newASCII = ASCII[recentLetter-1];
              // Fängt ASCII-Werte kleiner als A/a ab und beginnt
              // wieder bei Z/z
              // Wenn es sich um Kleinbuchstaben handelt, ist 96 der Grenzwert
              if(ASCII[recentLetter-1]>96
                 &&ASCII[recentLetter-1]<123
                 &&newASCII<96)
                               newASCII=newASCII+26;
              // Wenn es sich um Kleinbuchstaben handelt, ist 64 der Grenzwert
              if(ASCII[recentLetter-1]>64
                 &&ASCII[recentLetter-1]<91
                 &&newASCII<64)
                               newASCII=newASCII+26;
              // ASCII-Wert wird wieder in Char umgewandelt
              phrase[recentLetter-1]=(char)newASCII;
          }
          code_status = DECODED;
        }
       }
       
       /// Verschluesselt den aktuellen String
       /**
       * Der Parameter 'key' gibt den
       * Schluesselwert an. Ausserdem wird ueberprueft, ob der String
       * bereits als verschluesselter Text vorliegt. Ist dies der Fall, so
       * bleibt dieser unveraendert. Somit kann keine doppelte Verschluesse-
       * lung realisiert werden.
       */
       void encode(int key)
       {
        if(code_status==DECODED)
        {
          int ASCII[255];
          int newASCII;

          for (int recentLetter=1; recentLetter<=length; recentLetter++)
          {
              // Array mit ASCII-Werten der Zeichen fuellen
              ASCII[recentLetter-1]=(int)phrase[recentLetter-1];
          }

          for (int recentLetter=1; recentLetter<=length; recentLetter++)
          {
              // Wenn es sich um einen Buchstaben handelt, wird er verschluesselt
              if((ASCII[recentLetter-1]>96
                 &&ASCII[recentLetter-1]<123)
                 ||(ASCII[recentLetter-1]>64
                 &&ASCII[recentLetter-1]<91))
              newASCII = ASCII[recentLetter-1]+key;
              // Ansonsten wird nichts veraendert
              else newASCII = ASCII[recentLetter-1];
              // Fängt ASCII-Werte groesser als Z/z ab und beginnt
              // wieder bei A/a
              // Wenn es sich um Kleinbuchstaben handelt, ist 122 der Grenzwert
              if(ASCII[recentLetter-1]>96
                 &&ASCII[recentLetter-1]<123
                 &&newASCII>122)
                               newASCII=newASCII-26;
              // Wenn es sich um Kleinbuchstaben handelt, ist 90 der Grenzwert
              if(ASCII[recentLetter-1]>64
                 &&ASCII[recentLetter-1]<91
                 &&newASCII>90)
                               newASCII=newASCII-26;
              // ASCII-Wert wird wieder in Char umgewandelt
              phrase[recentLetter-1]=(char)newASCII;
          }
          code_status = ENCODED;
        }
       }

       /// Entschluesselt den aktuellen String
       /**
       * Der Parameter 'key' gibt den
       * Schluesselwert an. Ausserdem wird ueberprueft, ob der String
       * bereits als entschluesselter Text vorliegt. Ist dies der Fall, so
       * bleibt dieser unveraendert. Somit kann keine doppelte Entschluesse-
       * lung realisiert werden.
       */
       void decode(int key)
       {
        if(code_status==ENCODED)
        {
          int ASCII[255];
          int newASCII;
          for (int recentLetter=1; recentLetter<=length; recentLetter++)
          {
              // Array mit ASCII-Werten der Zeichen füllen
              ASCII[recentLetter-1]=(int)phrase[recentLetter-1];
          }
          for (int recentLetter=1; recentLetter<=length; recentLetter++)
          {
              // Wenn es sich um einen Buchstaben handelt, wird er verschluesselt
              if((ASCII[recentLetter-1]>96
                 &&ASCII[recentLetter-1]<123)
                 ||(ASCII[recentLetter-1]>64
                 &&ASCII[recentLetter-1]<91))
              newASCII = ASCII[recentLetter-1]-key;
              // Ansonsten wird nichts veraendert
              else newASCII = ASCII[recentLetter-1];
              // Fängt ASCII-Werte kleiner als A/a ab und beginnt
              // wieder bei Z/z
              // Wenn es sich um Kleinbuchstaben handelt, ist 96 der Grenzwert
              if(ASCII[recentLetter-1]>96
                 &&ASCII[recentLetter-1]<123
                 &&newASCII<96)
                               newASCII=newASCII+26;
              // Wenn es sich um Kleinbuchstaben handelt, ist 64 der Grenzwert
              if(ASCII[recentLetter-1]>64
                 &&ASCII[recentLetter-1]<91
                 &&newASCII<64)
                               newASCII=newASCII+26;
              // ASCII-Wert wird wieder in Char umgewandelt
              phrase[recentLetter-1]=(char)newASCII;
          }
          code_status = DECODED;
        }
       }
};
Angehängte Dateien
Dateityp: zip cesar.zip (1,7 KB, 1x aufgerufen)
lBr1anl ist offline   Mit Zitat antworten
Alt 11.09.08, 08:20   #37 (permalink)
 
Registriert seit: 02.08.08
Cr4ckEye Leistung: Facit NTK
Likes: 0
Standard

Zwar schon älter hier aber ich habe auch mal ein kleine, zwar nicht sehr professionelle oder umfangreiche lösung für mich gefunden (C++):

Code:
#include <cstdlib>
#include <iostream>

using namespace std;

void caesar(char cha[], int schlussel);                 // Mache caesar bekannt

int main()
{
 char ch[50] = {'\0'};                                   // 50x leer
 int key = 0;
 
 cout << "*******************************\n";
 cout << "* Caesar Schiffre by Cr4ckEye *\n";           // Ausgaben
 cout << "*******************************\n\n" << endl;
 cout << "Bitte geben Sie einen Text ein: ";
 cin.getline(ch, 50);                                  // Max 50 Zeichen mit Whitespace
 do
 {
 cout << "Bitte geben Sie den Schluessel ein: ";       
 cin >> key;
 } while(key<=0 && key>=26);                           // Key nicht größer als 25
 cout << "\nVerschluesselt: ";
 caesar(ch, key);                                      // Ver und Entschlüsseln
 cin.get();                                            // Halte Fenster offen
 cin.get();
}

void caesar(char cha[], int schlussel)
{
     for(int i=0; i<50; ++i)                          // Verschlüsselung
     {
     if(cha[i] == '\0') break;                        // 0 Terminator -> Ende
      while(cha[i] == 32)                             // Whitespace ausgeben
      { cout << " "; ++i; }                           
      cha[i] = toupper(cha[i])+schlussel;    // Zu Großbuchstabe und Berechnung
      cout << cha[i];                                 // Ausgabe
     }
     
     cout << "\n\nEntschluesselt: ";                  // Entschlüsselung
     
     for(int j=0; j<50; ++j)                          
     {
     if(cha[j] == '\0') break;                        // 0 Terminator -> Ende
      while(cha[j] == 32)                             // Whitespace ausgeben
      { cout << " "; ++j; }
      cha[j] = cha[j]-(schlussel*2);                  // Konvertrierung und Berechnung (schlussel*2), 
                                                      // da er vorher ja nocheinmal um den selben Schlüssel verschoben wurde.
      cout << cha[j];                                 // Ausgabe
     }
}
Cr4ckEye ist offline   Mit Zitat antworten
Alt 18.09.08, 10:38   #38 (permalink)
 
Registriert seit: 11.09.08
root.tea Leistung: Facit NTK
Likes: 0
Standard

So hab das ganze mal als Handy-Application(JAVA ME)
13 ist der Standardkey damit kann man En- und decrypten mit nur einer Methode.

Code:
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;

public class CryptIt extends MIDlet implements CommandListener 
{
	private Display display;
	private Form form = new Form("Crypt IT");
	private Command crypt = new Command("Crypt", Command.SCREEN, 1);
	private Command exit = new Command("Exit", Command.EXIT, 1);
	private TextField textfield = new TextField("Standardkey 13:", "", 50, TextField.ANY);

	public static String cryptit( String s )
	{
    	StringBuffer ergebnis = new StringBuffer();
		int key=13;
		
   	 	for( int i = 0; i < s.length(); i++ )
    	{
      		int c = s.charAt( i );

      		if ( (c >= 'A') && (c <= 'z') ) 
      		{
        		c += key;
        		if( c > 'z' )
          		c = 'a' + c % 'z' -1;
        		if( (c > 'Z') && (c < 'a') ) 
          		c = 'A' + c % 'Z' - 1;
      		}
      		ergebnis.append( (char) c );
    	}
    
    	return ergebnis.toString();
  	} 
  
	public CryptIt() 
	{
    	display = Display.getDisplay(this);
    	form.addCommand(exit);
    	form.addCommand(crypt);
    	form.append(textfield);
    	form.setCommandListener(this);
  	}

	public void startApp() 
	{
    	display.setCurrent(form);
 	}

  	public void pauseApp() 
  	{
 	}

	public void destroyApp(boolean unconditional) 
	{
 	}

	public void commandAction(Command command, Displayable displayable) 
	{
    	if (command == crypt) 
    	{
      		String textin = textfield.getString();
      		String encrypt = cryptit(textin);
      
      		textfield.setString(encrypt);
    	} else if (command == exit) 
    	{
      		destroyApp(false);
      		notifyDestroyed();
    	}
  	}
}
root.tea ist offline   Mit Zitat antworten
Alt 14.11.08, 17:58   #39 (permalink)
 
Registriert seit: 02.12.07
nookstar Leistung: Facit NTK
Likes: 0
Standard

So ich habe nun auch mal aus Übungszwecken ein Caesar Verschlüsselungsprogramm in Java geschrieben :>
Man muss eine Quell und eine Zieldatei angeben und dann wird es ja nach Wahl ver- oder entschlüsselt.
Es ist noch in der Testphase daher ein wenig verbuggt , es werden manche Zeichen bei der entschlüsselung falsch interpretiert.
Leider ist es auf Konsoleneben aber wenn der Code soweit in Ordnung ist werde ich mich mal an eine GUI wagen
So ein kleines "Projekt" ist echt super zum üben.

Sind ein paar mehr Dateien, daher Caesar.rar
nookstar ist offline   Mit Zitat antworten
Alt 30.11.08, 23:41   #40 (permalink)
 
Registriert seit: 21.04.08
Ook! Leistung: Facit NTK
Likes: 0
Standard

Caesar & Vigenere in Python:

Code:
chars = [ chr(n) for n in range(65,91) ]

# Caesar
def caesar(text, shift, dec=1):
    return "".join([ chars[(ord(c)-65+(dec*shift))%26] for c in text ])

# Vigenere
def encodeVigenere(text, key, dec=1, idx=0, result=""):
    for c in text:
        result += chars[ (ord(c)-65+(dec*chars.index(key[idx])))%26 ]
        idx = (idx + 1) % len(key)
    return result

if __name__ == '__main__':
    print caesar("FELIX", 3)
    print caesar("IHOLA", 3, -1)
    
    print encodeVigenere("GEHEIMNIS", "AKEY")
    print encodeVigenere("GOLCIWRGS", "AKEY", -1)
Gruß
Felix
Ook! ist offline   Mit Zitat antworten
Alt 02.01.09, 14:54   #41 (permalink)
 
Registriert seit: 26.12.08
Athelstan Leistung: Facit NTK
Athelstan eine Nachricht über ICQ schicken
Likes: 0
Standard

Hier meine Version in ruby, sie verschlüsselt eingegebenen Text oder Files im Caesarcode, man kann eingeben, um wieviel Buchstaben verschoben werden soll. Der eingegebene Text oder der Text im File sollte in Kleinbuchstaben geschrieben sein, alles andere bleibt wie es ist, und das Ergebnis ist in Großbuchstaben, wie es bei Verschlüsselungen Standard ist.

Code:
class VProg
	def initialize(x)
		@x = x
	end
	def to_s
		if @x == 1
			textv()
		elsif @x == 2
			dateiv()
		else
			exit
		end
	end
	private
	def textv()
		puts "\n\n|-----Caesar-Verschluesselung-----|"
		puts "Geben Sie nun den Text in Kleinbuchstaben ein, der verschluesselt werden soll:\n\n"
		text1 = gets.chomp
		puts "\n\nGeben Sie ein, mit welchem Faktor der Text verschluesselt werden soll:\n\n"
		faktor = gets.to_i; text2 = verschluesseln(text1, faktor)
		puts text2
	end
	def dateiv()
		puts "\n\n|-----Caesar-Verschluesselung-----|"
		puts "Geben Sie nun den kompletten Pfad der Datei an, die verschluesselt werden soll:\n\n"
		pfad = gets.chomp
		puts "\n\nGeben Sie ein, mit welchem Faktor der Text verschluesselt werden soll:\n\n"
		faktor = gets.to_i; file = open(pfad, "r"); text1 = file.read; file.close
		text2 = verschluesseln(text1, faktor); file = open(pfad, "w"); file.print "#{text2}"
		puts "\n\nDatei verschluesselt.\n\n"
	end
	def verschluesseln(text1, faktor)
		a = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
		b = {"a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5, "f"=>6, "g"=>7, "h"=>8, "i"=>9, "j"=>10, "k"=>11, "l"=>12, "m"=>13, "n"=>14, "o"=>15, "p"=>16, "q"=>17, "r"=>18, "s"=>19, "t"=>20, "u"=>21, "v"=>22, "w"=>23, "x"=>24, "y"=>25, "z"=>26}
		text2 = text1.split(""); text1 = ""
		text2.each { |part|
			if b[part] != nil
				text1 += a[(b[part]-1-(26-faktor))]
			else
				text1 += part
			end
		}
		return text1
	end
end
puts "\n\n|--------------Menue--------------|"
puts "(1) Text verschluesseln"
puts "(2) Datei verschluesseln"
puts "(3) Programm beenden\n\n"
x = gets.to_i; vprog = VProg.new(x); vprog.to_s
Athelstan ist offline   Mit Zitat antworten
Alt 06.04.09, 18:43   #42 (permalink)
 
Registriert seit: 21.04.08
Ook! Leistung: Facit NTK
Likes: 0
Standard

und nochmal in Haskell ...

Code:
import Char
import List

caesar :: String -> (Int, Int) -> String
caesar [] (_, _) = []
caesar (x:xs) (shift, dec) = enc : caesar xs (shift, dec)
  where
    enc = [ 'A'..'Z'] !! (mod (ord x - 65 + (dec * shift)) 26)

vigenere :: String -> String -> (Int, Int) -> String
vigenere [] _ (_, _) = []
vigenere (x:xs) ks (idx, dec) = enc : vigenere xs ks (newIdx, dec)
  where
    alph = [ 'A'..'Z']
    newIdx = mod (idx + 1) (length ks)
    enc = alph !! (mod (ord x - 65 + (dec * (shift (ks !! idx, 0)))) 26)
    shift (k, i) = if i > 25 then 1 else if alph !! i == k then i else shift (k, i+1)

main :: IO()
main = do
  putStrLn $ "FELIX -> " ++ caesar "FELIX" (3, 1)
  putStrLn $ "IHOLA -> " ++ caesar "IHOLA" (3, -1)
  putStrLn $ "GEHEIMNIS -> " ++ vigenere "GEHEIMNIS" "AKEY" (0, 1)
  putStrLn $ "GOLCIWRGS -> " ++ vigenere "GOLCIWRGS" "AKEY" (0, -1)
Gruß
Felix
Ook! ist offline   Mit Zitat antworten
Alt 14.04.09, 19:15   #43 (permalink)
 
Benutzerbild von pytohn
 
Registriert seit: 28.03.09
pytohn Leistung: Facit NTK
Likes: 0
Standard

python3

kann nur cäsar und kann nur eingegebenen string ver-/entschlüsseln. habe vor, dateien vielleicht in den nächsten tagen noch ein zu bauen.


Code:
def encode(char, str):
    clear = "abcdefghijklmnopqrstuvwxyz"
    cryptic = clear[clear.index(char):] + clear[:clear.index(char)]

    crystr = ""

    str = str.lower()
    
    for i in str:
        if i not in clear:
            new = i
        else:
            new = cryptic[clear.index(i)]

        crystr = crystr + new

    return crystr

def decode(char, str):
    clear = "abcdefghijklmnopqrstuvwxyz"
    cryptic = clear[clear.index(char):] + clear[:clear.index(char)]

    enstr = ""

    str = str.lower()

    for i in str:
        if i not in cryptic:
            new = i
        else:
            new = clear[cryptic.index(i)]

        enstr = enstr + new

    return enstr
pytohn ist offline   Mit Zitat antworten
Alt 14.04.09, 22:59   #44 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Nochmal in Python so dass es keiner versteht

Cäsar:
Code:
text="TEST"; key=3; print "".join([chr((ord(c)-65+key)%26+65) for c in text])
Vigen?re:
Code:
text="TEST"; key="ABC"; print "".join([chr((ord(text[i])+ord(key[i%len(key)])-130)%26+65) for i in range(len(text))])
Eydeet ist offline   Mit Zitat antworten
Alt 16.04.09, 14:53   #45 (permalink)
 
Registriert seit: 14.04.09
Höfi Leistung: Facit NTK
Likes: 0
Standard

Hier mal mein Cäsar programm in Brainfuck :
Code:
,------------------------------------------------[->+<],>>>,----------[++++++++++<<[->+>+<<]>[-<+>]>.,----------]
Als erstes muss man den Schlüssel eingeben(leider nur von 0-9) und dann mit enter bestätigen. Als nächstes gibt man den zu verschlüsselnden text ein und bestätigt wieder mit enter.
Getestet mit Brainfuck Developer.
Ist vieleicht noch verbesserbar...
Höfi ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » kleines Verschlüsselungsprogramm
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Neues Verschlüsselungsprogramm (selbst gecodet) Tec Cryptography & Encryption 101 20.07.07 11:37
Verschlüsselungsprogramm Until-Death Code Kitchen 5 01.07.07 13:34
Verschlüsselungsprogramm antcool Cryptography & Encryption 14 21.10.05 16:31
Bestes Verschlüsselungsprogramm spyro133 Cryptography & Encryption 2 20.06.05 08:09
Verschlüsselungsprogramm Avenger Cryptography & Encryption 5 22.11.04 21:59


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