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