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üsseln

    Wie mach ich das?

    Bitte um ein Beispiel,
    danke im Voraus

    Gruß
    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



  • @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 kodiert
    

    Aus 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).


Anmelden zum Antworten