Z
Ich hoffe das versteht niemand als Spam:
hier ein kleines demo prog wie vigenere funktioniert, ich habe dabei eine relativ kurze schlüssellänge gewählt, alles in der konsole sichtbar.
Bitte net über die form der Programmierung meckern,..
// Name: vigenere Demo
// Copyright: (c) 2008
// Author: ZeuSOsC
// Date: 10.01.08 15:40
// Description: simple (en-)cryption demo
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <sstream>
#include <vector>
/*at first hashing, vigenere will follow*/
using namespace std;
typedef struct vig_table{
protected:
int columns,rows;
string solved_encoded;
public:
string solved_coded;
vector<string> string_table;
vig_table(string alphabet):local_alphabet(alphabet),columns(0),rows(0)
{//here will the vigtable be created
string temp1,temp2;
temp2="";
temp2=local_alphabet;
string_table.push_back(temp2);
for(long int i1=0;i1<local_alphabet.length()-1;i1++)
{
temp1="";
temp1=temp2;
for(long int i=0;i<local_alphabet.length();i++)
{
if((i+1)<local_alphabet.length()){temp2[i]=temp1[i+1];}
else{temp2[i]=temp1[0]; };
}
//cout<<temp1<<" "<<string_table.size()<<endl;
string_table.push_back(temp2);
}
};
~vig_table(){};
void operator()(string key,string chiffre){
//here will be coded and encoded
string temp1,temp2;
temp1="";
temp2="";
long int chiffre_counter,key_counter;
key_counter=0; chiffre_counter=0;
cout<<endl;
do
{
if(key_counter>=key.length()){key_counter=0;};
if(find_local_coding_index(key[key_counter],chiffre[chiffre_counter])>=0)
{
temp1+=string_table[rows][columns];
//cout<<" "<<temp1;
}else{cout<<"error "<<rows<<" "<<columns<<endl; break;};
if(find_local_encoding_index(key[key_counter],chiffre[chiffre_counter])>=0)
{
temp2+=string_table[0][columns];
//cout<<" "<<temp2<<endl;
}else{cout<<"error "<<rows<<" "<<columns<<endl; break;};
key_counter++;
chiffre_counter++;
}while(chiffre_counter<chiffre.length());
solved_coded=temp1;
solved_encoded=temp2;
cout<<endl<<"Chiffre: "<<chiffre<<endl<<endl<<"Coded: "<<solved_coded<<endl<<endl<<"Encoded: "<<solved_encoded<<endl<<endl;
}
private:
string local_alphabet;
int find_local_coding_index(char key_member,char text_member)
{
int local_error;
int found;
char temp;
local_error=-1;
found=local_alphabet.find(text_member);
if(found!=string::npos){columns=found;}else{return local_error;};
for(long int i=0;i<string_table.size();i++)
{
temp=string_table[i][0];
if(temp == key_member){local_error=0; rows=i; return local_error; };
}
};
int find_local_encoding_index(char key_member,char text_member)
{
int local_error;
int found;
char temp;
local_error=-1;
for(long int i=0;i<string_table.size();i++)
{
temp=string_table[i][0];
if(temp == key_member)
{
local_error=0; rows=i;
found=string_table[i].find(text_member);
if(found!=string::npos){columns=found;}else{return -1;};
return local_error;
};
}
};
};
ostream& operator<<(ostream& os,const struct vig_table &rhs)
{
string temp;
for(long int i=0;i<rhs.string_table.size();i++)
{
temp="";
temp+=rhs.string_table[i];
os<<temp<<endl;
}
return os;
};
int main(int argc, char *argv[])
{
string example_alphabet;
example_alphabet="";
//example_alphabet+="°^\"§$%&/()=?\}]][{³²*+~#'-_.:,;µ<>|@ ";
example_alphabet+="!\"&%=? \\}][{()_-,.+*#':;/$";
example_alphabet+="0123456789";
example_alphabet+="abcdefghijklmnopqrstuvwxyz";
example_alphabet+="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//example_alphabet+="áéúíóàèùìòâêûîô";
//example_alphabet+="ÁÉÚÍÓÀÈÙÌÒÂÊÛÎÔ";
//example_alphabet+="äöüÄÖÜ";
string example_key="This_is_a_KEY, to_code_a_TEXT!\0";
string example_chiffre="And this is a text, which should be coded and encoded in this demo of VIGENERE ALGORITHM for polyalphabetic substitution.\0";
cout<<endl;
cout<<"______________________________________________________"<<endl<<endl;
cout<<" vigenere_ coding and encoding demo_code v0.2 "<<endl<<endl;
cout<<" ZeuSOsC (c) - Jan 2008 "<<endl<<endl;
cout<<" mail: 9387@gmx.de "<<endl;
cout<<"______________________________________________________"<<endl<<endl;
cout<<"Example Aplhabet: "<<example_alphabet<<endl;
cout<<"Creating Vigenere Table:"<<endl<<"______________________________________________________"<<endl<<endl;
vig_table testa(example_alphabet);
system("pause");
cout<<testa<<endl<<"______________________________________________________"<<endl;
cout<<"Key: "<<example_key<<endl;
testa(example_key,example_chiffre);
testa(example_key,testa.solved_coded);
system("pause");
return EXIT_SUCCESS;
}
grüüße