super einfache verschlüsselung, komisches problem!
-
//############ //#includes--# //############ #include <iostream> #include <string> #include <math.h> #include <windows.h> using namespace std; //############ //#funktionen# //############ bool isupper(char ch) { return (ch>=65 && ch<=90); } bool islower(char ch) { return (ch>=97 && ch<=122); } bool ischar(char ch) { return ((ch>=65 && ch<=90) || (ch>=97 && ch<=122)); } char *itos(int i) { char *tmp = new char[10]; itoa(i,tmp,10); return tmp; } char *remspecialchars(string ch){ char *chX = new char[ch.length()]; char *chX2 = new char[ch.length()]; chX = (LPSTR)ch.c_str(); int len = 0; for(int i=0;i<ch.length();++i) { if(ischar(chX[i])) { chX2[i-len] = chX[i]; } else { ++len; } } char *ret = new char[ch.length()-len+1]; for(int j=0;j<ch.length()-len;++j) { ret[j] = chX2[j]; } ret[ch.length()-len] = '\0'; cout<<"Umwandlung in reintext:"<<endl<<ret<<endl<<"----"<<endl; return ret; } char makelower(char ch, int i) { if(isupper(ch)) { ch = ch+32; } int x = i/26; cout<<ch<<" | "<<itos(i)<<" | "<<itos(x)<<endl; i = i+(x*-26); ch = ch+i; while(ch>122) { ch = ch-26; } cout<<ch<<" | "<<itos(i)<<" | "<<itos((int)ch)<<endl; return ch; } char decrypt(char ch, int i) { int x = i/26; i=i-(x*26); ch = ch-i; while(ch<97) { ch = ch+26; } return ch; } //############ //#main------# //############ void main() { while(1) { int mode; cout<<"Was moechten sie tun?[1:verschluesseln 2: entschluesseln]"<<endl; cin>>mode; switch(mode) { case 1: { string sKey; string sText; //eingabe: cout<<"Bitte Keyword angeben [max 254 Zeichen, Zahl bei Modus 1]:"<<endl; getline(cin,sKey); getline(cin,sKey); cout<<"Bitte Text angeben:"<<endl; getline(cin,sText); cout<<"--------"<<endl; cout<<"Key:"<<sKey.c_str()<<endl; cout<<"Text:"<<sText.c_str()<<endl; cout<<"--------"<<endl; cout<<"Verschluesselung waehlen [1=einfach]"<<endl; int i; cin>>i; char *cText = new char[sText.length()+1]; char *cKey = new char[sKey.length()+1]; cKey[sKey.length()] = '\0'; cKey = (LPSTR)sKey.c_str(); cText[sText.length()] = '\0'; switch(i) { case 1: { cText = remspecialchars(sText); for(int x = 0;x<strlen(cText);++x) { cText[x] = makelower(cText[x],atof(cKey)+x); } cout<<"Verschluesselter Text:"<<endl<<cText<<endl<<"-----"<<endl; break; } case 2: { break; } } break; } case 2: { string sKey; string sText; //eingabe: cout<<"Bitte Keyword angeben [max 254 Zeichen, Zahl bei Modus 1]:"<<endl; getline(cin,sKey); getline(cin,sKey); cout<<"Bitte Text angeben:"<<endl; getline(cin,sText); cout<<"--------"<<endl; cout<<"Key:"<<sKey.c_str()<<endl; cout<<"Text:"<<sText.c_str()<<endl; cout<<"--------"<<endl; cout<<"Entschluesselung waehlen [1=einfach]"<<endl; int i; cin>>i; char *cText = new char[sText.length()+1]; char *cKey = new char[sKey.length()+1]; cKey[sKey.length()] = '\0'; cKey = (LPSTR)sKey.c_str(); cText[sText.length()] = '\0'; switch(i) { case 1: { cText = remspecialchars(sText); for(int x = 0;x<strlen(cText);++x) { cText[x] = decrypt(cText[x],(atof(cKey)*-1)+x); } cout<<"Entschluesselter Text:"<<endl<<cText<<endl<<"-----"<<endl; break; } break; } } } } }
das war der quelltext...(für ne ganz einfache verschlüsselung, unser inf lehrer kann dank der deppen in meiner klasse keine anspruchsvollen aufgaben stellen...)
nun, folgendes:
Was moechten sie tun?[1:verschluesseln 2: entschluesseln] 1 Bitte Keyword angeben [max 254 Zeichen, Zahl bei Modus 1]: 0 Bitte Text angeben: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz -------- Key:0 Text:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz -------- Verschluesselung waehlen [1=einfach] 1 Umwandlung in reintext: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz ---- z | 0 | 0 z | 0 | 122 z | 1 | 0 a | 1 | 97 z | 2 | 0 b | 2 | 98 z | 3 | 0 c | 3 | 99 z | 4 | 0 d | 4 | 100 z | 5 | 0 e | 5 | 101 z | 6 | 0 Ç | 6 | -128 z | 7 | 0 ü | 7 | -127 z | 8 | 0 é | 8 | -126 z | 9 | 0 â | 9 | -125 z | 10 | 0 ä | 10 | -124 z | 11 | 0 à | 11 | -123 z | 12 | 0 å | 12 | -122 z | 13 | 0 ç | 13 | -121 z | 14 | 0 ê | 14 | -120 z | 15 | 0 ë | 15 | -119 z | 16 | 0 è | 16 | -118 z | 17 | 0 ï | 17 | -117 z | 18 | 0 î | 18 | -116 z | 19 | 0 ì | 19 | -115 z | 20 | 0 Ä | 20 | -114 z | 21 | 0 Å | 21 | -113 z | 22 | 0 É | 22 | -112 z | 23 | 0 æ | 23 | -111 z | 24 | 0 Æ | 24 | -110 z | 25 | 0 ô | 25 | -109 z | 26 | 1 z | 0 | 122 z | 27 | 1 a | 1 | 97 z | 28 | 1 b | 2 | 98 z | 29 | 1 c | 3 | 99 z | 30 | 1 d | 4 | 100 z | 31 | 1 e | 5 | 101 z | 32 | 1 Ç | 6 | -128 Verschluesselter Text: zabcdeÇüéâäàåçêëèïîìÄÅÉæÆôzabcdeÇ ----- Was moechten sie tun?[1:verschluesseln 2: entschluesseln]
wie man sieht, negativieren sich die chars ab dem 6ten. ich habe leider KEINE ahnung warum! ihr könnt den code schnell ausprobieren, der ist ja vollständig. ich hab echt lange rumgerätselt, bin aber nicht druff gekommen!
vielen dank wenn sich das mal wer schnell durchguckt
-
Naja, vielleicht findet sich ja ein aufopferungsvoller Helfer, der deinen Source durchsucht. Ansonsten: Debuggen.
-
naja ich kriege ja keine fehlermeldung!
-
Fehlermeldung beim Kompilieren = Syntaxfehler => C++-Buch/Standard verwenden.
Programmcode funktioniert nicht => Debugger verwenden.mfg JJ
-
Schau dir den Wertebereich von signed char an:-128 bis 128
verwende lieber einen anderen typ z.b unsigned char 0 bis 255 wenn du einen etwas größeren wertebereich haben willst.
-
ahhh cico XD natüüürlich...thx!
char makelower(char ch2, int i) { int ch = (int) ch2; if(isupper(ch)) { ch = ch+32; } int x = i/26; cout<<ch<<" | "<<itos(i)<<" | "<<itos(x)<<endl; i = i+(x*-26); ch = ch+i; while(ch>122) { ch = ch-26; } cout<<ch<<" | "<<itos(i)<<" | "<<itos((int)ch)<<endl; ch2 = (char)ch; return ch2; }
-
Cico schrieb:
Schau dir den Wertebereich von signed char an:-128 bis 128
[korrektur]
Signed char hat aber einen Wertebereich von -128 bis 127.
[/korrektur]