XOR Verschlüsslung
-
Hallo,
würde gerne einen String XOR Verschlüsseln.
z.B.
String s = "test" // zu verschlüsselnder String
String sBinKey = "1001" // Dualzahl zum verschlüsselnWie mach ich das?
Bitte um ein Beispiel,
danke im VorausGruß
IcemanX
-
char Key; Key='a'; char *String="Hallo"; int b; for(int i=0;i<strlen(String);i++) { b=String[i]; asm{ mov eax,b mov ebx,Key xor eax,ebx mov b,eax } String[i]=b; }Bitte nicht hauen, wenns falsch ist, hab gard keinen BCB. Aber irgendwie so in etwa müsste es gehen

-
Der Operator hierfür ist ^.
Einfach auf jedes Zeichen (beider Strings) anwenden.P.S: Dein Schlüssel "1001" ist nicht so toll.
Am besten, du beschäftigst dich ein bißchen mit der Binärdarstellung der (ASCII-) Zeichen.
-
Erst ein mal einen lieben dank @GCoder und @Th,
möchte halt wirklich z.B. die Dualzahl 1001 als Schlüssel verwenden,
mir ist klar wie Hexzahlen verwende, aber wie benutze ich Dual-Zahlen in C++,
gibt es da auch was wie die Darstellung z.B. 0xFFAA00.
Das Zeichen für XOR war mir auch bewust, hätte mich wohl besser ausdrücken sollen.Lg
IcemanX
-
Hallo
Intern werden alle Integers im Dualsystem behandelt. Nur die Darstellung kann varieren. Deshalb kannst du ruhig den Schlüssel als Hexcode übergeben.
bis bald
akari
-
Und wie stelle ich mit C++ 1001 jetzt nun dar? Hatte an eine Funktion gedacht wie DualToHex(String bin), fühle mich grad unverstanden, war es echt so unverständlich?
-
Hallo
Eine solche Funktion brauchst du wirklich nicht.
Um nochmal auf den eigentlichen Zweck zurückzukommen :
Du willst eine zeichenkette kodieren. Zeichenketten bestehen aus chars, die sind bereits integrale Typen mit denen du einzelne Integer-Operationen machen kannst.
Nehmen wir mal ein einfaches Beispiel :AnsiString Text ="Test"; char Code = 0xA0; // Einstelliger Code Text[1] = Text[1] ^ Code; // Ein Zeichen des Textes wird kodiertAus dem Beispiel solltest du dir jetzt ableiten, wie du
- alle Zeichen des Textes kodierst
- einen mehrstelligen Code verwenden kannst.Das heißt vergiß das Denken in Dual und Hex, das übernimmt der Compiler für dich.
Ein Problem ist aber noch : der Datentyp AnsiString (wie jede andere Strin gklasse) eignet sich nur bedingt zum Kodieren. Denn sobald als Ergebnis der Operation der Wert 0 (nicht '0', sondern '\0') herauskommt, kommt es zu Fehlern da dieses Zeichen als Endzeichen betrachtet wird.
Nimm also lieber StringStreams oder FileStreams.bis bald
akari
-
dual 1001 entsprichte also 0x09 (Hex) oder 9 (dezimal) oder 011 (oktal).