Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.02.2005, 15:57 Titel: Enigma |
|
|
hm falls es irgendjemanden intressiren sollte, ich hab mal die Enigma aus dem Offtopicbereich geproggt...
naja, nciht perfekt, leicht Fehlreanfällig, im Moment verarbeitet die nur kleine Buchstaben und Leerzeichen. Naja viel Spaß damit *g*:
www.webspace-kostenlos.com/c3-soft _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 06.02.2005, 16:00 Titel: |
|
|
Zitat: | Fehler:
Datei konnte nicht gefunden werden |
|
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.02.2005, 16:02 Titel: |
|
|
was soll openSouce sein, die Enigma?
hm, ka. könnte ja vileiecht mal den Quellcoe posten, wenns irgendjemand interessiert... _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.02.2005, 16:15 Titel: |
|
|
http://mckoss.com/Crypto/Enigma.htm
äh, das Progegn war ziemlich simpel schaut euch dne Link an, ich habe gaenau das Nachgeproggt.
CPP: | class Rotor
{
public:
Rotor(char Links[26], char Rechts[26], int Pfeil);
int GetLeft(char Char);//liefert die Positions des gesuchten Buchstabens auf der Linken seite
int GetRight(char Char);//wie oben nur mit rechts
char GetLeft(int Number);
char GetRight(int Number);
void Set(char Char);//dreht das rad auf den buchstaben
bool Rotate();//liefert true, wenn das nächste rad auch gedreht
protected:
char m_Links[26];
char m_Rechts[26];
int m_Rotation;
int m_Pfeil;//gibt an, wo das nächste Rad gedreht werden muss!
};
Rotor::Rotor(char Links[26], char Rechts[26], int Pfeil)
{
ZeroMemory(this, sizeof(Rotor));
m_Pfeil=Pfeil;
memcpy(m_Links, Links, sizeof(char)*26);
memcpy(m_Rechts, Rechts, sizeof(char)*26);
}
int Rotor::GetLeft(char Char)
{
/*
es gibt zwei Variablen zum Zählen, eine die die Position der Ausgangsstellung repräsentiert,
und eine die die Psition im Array beschreibt. das ist wichtig weil das Arry vileiecht bei 8
anfangen muss zu zählen, dann aber bis 26+8 laufen muss, es muss also bei 26 auf 0 gestellt
weden, weils sonst nciht ginge
*/
for(int i=m_Rotation, int Counter=0; Counter<26; i++, Counter++)
{
if(i>=26)
{
i-=26;
}
if(m_Links[i]==Char)
{
return Counter;//-m_Rotation;
}
}
return -2;//wenn das hier eintreten sollte, ist die Enigma wahrscheinlich kaput...
}
int Rotor::GetRight(char Char)
{
for(int i=m_Rotation, int Counter=0; Counter<26; i++, Counter++)//s.o.
{
if(i>=26)
{
i-=26;
}
if(m_Rechts[i]==Char)
{
return Counter;//-m_Rotation;
}
}
return -2;//wenn das hier eintreten sollte, ist die Enigma wahrscheinlich kaput...
}
char Rotor::GetLeft(int Number)
{
if(Number+m_Rotation>25)
{
return m_Links[Number+m_Rotation-26];
}
return m_Links[Number+m_Rotation];
}
char Rotor::GetRight(int Number)
{
if(Number+m_Rotation>25)
{
return m_Rechts[Number+m_Rotation-26];
}
return m_Rechts[Number+m_Rotation];
}
void Rotor::Set(char Char)
{
m_Rotation=GetLeft(Char);
}
bool Rotor::Rotate()
{
m_Rotation++;
if(m_Rotation>25)
{
m_Rotation-=26;
}
return (m_Rotation==m_Pfeil);//wenn da der Pfeil ist, muss das nächste rad gedreht werdne
}
class Reflector
{
public:
Reflector(char Chars[26]);
int Get(int Number);/*gibt die Nummer zurück an der das selbe Zeichen steht,
wii an der nummer...*/
private:
char m_Chars[26];
};
Reflector::Reflector(char Chars[26])
{
memcpy(m_Chars, Chars, sizeof(char)*26);
}
int Reflector::Get(int Number)
{
char Char=m_Chars[Number];
for(int i=0; i<26; i++)
{
if(m_Chars[i]==Char && i!=Number)
{
return i;
}
}
return -1;//sollte bei korrekteer initialiserung nicht auftreten...
}
class Alphabet
{
public:
Alphabet()
//m_Chars("abcdefghijklmnopqrstuvwxyz")
{
strcpy(m_Chars, "abcdefghijklmnopqrstuvwxyz");
}
int Get(char Char)
{
for(int i=0; i<26; i++)
{
if(m_Chars[i]==Char)
{
return i;
}
}
return -1;
}
char Get(int Number)
{
return m_Chars[Number];
}
protected:
char m_Chars[26];
};
class Enigma
{
public:
Enigma():
R3("abcdefghijklmnopqrstuvwxyz",
"bdfhjlcprtxvznyeiwgakmusqo", 22),
R2("abcdefghijklmnopqrstuvwxyz",
"ajdksiruxblhwtmcqgznpyfvoe", 5),
R1("abcdefghijklmnopqrstuvwxyz",
"ekmflgdqvzntowyhxuspaibrcj", 17),
Reflect("abcdefgdijkgmkmiebftcvvjat")
{
};
void Set(char C1, char C2, char C3)
{
R1.Set(C1);
R2.Set(C2);
R3.Set(C3);
}
char Get(char Char)
{
if(' '==Char)
{
return ' ';
}
if(R3.Rotate())
{
if(R2.Rotate())
{
R1.Rotate();
}
}
return Buchstaben.Get(R3.GetRight(R3.GetLeft(R2.GetRight(R2.GetLeft(R1.GetRight(R1.GetLeft(Reflect.Get(R1.GetLeft(R1.GetRight(R2.GetLeft(R2.GetRight(R3.GetLeft(R3.GetRight(Buchstaben.Get(Char)))))))))))))));
}
Get(char* String, char* Output)
{
for(int i=0; i<strlen(String); i++)
{
Output[i]=Get(String[i]);
}
}
protected:
Rotor R3;
Rotor R2;
Rotor R1;
Reflector
Reflect;
Alphabet Buchstaben;
};
|
_________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.02.2005, 16:54 Titel: |
|
|
*g*
na wiels so auch geht!
ich meine das ganze Ding ist ja sehr unflexibel, schaut euch mal die 15 Funktionen ineinander an, das hätte man in ner Schleife machen müssen...
und sowieso un düberhauplt ist da ja keine Fehlerkontrolle und so.
Habe ja auch mal überlegt die mit alles ASCI Zeichen zu machen und mit mehr Rädern, dann könnte man TExtdatein verschlüsseln und zwar noch leicht sicherer, aber was solls, irgendwann vieliecht einmal. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
C++progging Senior JLI'ler
Alter: 31 Anmeldedatum: 03.10.2005 Beiträge: 244 Wohnort: Sauerland Medaillen: Keine
|
Verfasst am: 14.10.2005, 14:08 Titel: |
|
|
Ähhhh..
wieso wird immer noch FEHLER.. angezeigt?
Kannste das nich auf'er C3-Page zum download freigeben???? |
|
Nach oben |
|
|
C++progging Senior JLI'ler
Alter: 31 Anmeldedatum: 03.10.2005 Beiträge: 244 Wohnort: Sauerland Medaillen: Keine
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 19.10.2005, 15:51 Titel: |
|
|
"multiple exclamation marks are a sure sign for a deseased mind"
Jonathan hat den Quellcode gepostet weshalb sollte er denn noch mehr tun? _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 19.10.2005, 17:42 Titel: |
|
|
c3-soft.de/downloads/WinEnigma.exe
Eine Version mit Windows Oberfläche. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
|