XOR mit char

reBourne

Erfahrenes Mitglied
Hallo allerseits,

Ich möchte einen char[a<=20] und einen char[20] mit XOR verschlüsseln!

Als Ausgabe hätte ich gern char[a], damit der rest aus meinem schlüssel (das ist der char[20] nicht auch im Ergebnis steht.

HILFEEEEEEEE................. ;-]
 
das ver- und entschlüsseln von feldelementen per xor funktioniert nach dem gleichen prinzip:

Code:
void main()
{

int len=0, i=0;
char line[]="TEST";

printf("%s\n",&line);

//verschlüsseln

len = strlen(line);
for(i=0;i<len;i++)
line[i] = line[i] ^ 22;

printf("%s\n",&line);

//entschlüsseln

len = strlen(line);
for(i=0;i<len;i++)
line[i] = line[i] ^ 22;

printf("%s\n",&line);
getch();
}

Ausgabe:

TEST
BSEB
TEST

Was du in jedem Fall beachten solltest, ist der Schlüssel...
 
das ist sehr interessant. Der code funktioniert auch fabelhaft aber kann mir jemand erklären was genau dieses XOR macht.
Es ist komisch ich programmiere schon mehr als 2 Jahre und weiß solche, wie ich denke grundlegenden sachen, nicht :-|
 
ah ok ich denk ich habs jetzt doch gerafft.
Code:
 wort[i] ^ 256 == wort[i]
 wort[i] ^ -1 == wort[i] ^ 255

es ist sozusagen ein ++ für chars :D
korrigiert mich bitte wenn ich stuss schreibe.
 
xor ist eine Bitverknüpfung mit 2 Operanden.
Dabei wird immer das erste Bit des 1. Operanden mit dem ersten Bit des zweiten Operanden verknüpft, und das nte Bit mit dem nten Bit....
wenn beide 1 sind, ist das Ergebnis 0
wenn eins 1 ist, ist das Ergebnis 1
wenn keins 1 ist, ist das Ergebnis 0

0 ^ 0 -> 0
0 ^ 1 -> 1
1 ^ 0 -> 1
1 ^ 1 -> 0

so ähnlich wie das Oder, nur beim oder ist das Ergebnis auch 1, wenn beide Bits 1 sind.
 
Nein, nein.. sicher kein ++ für chars! Was ganz andres! löl.. ;-)
außerdem gibts ++ für chars ja auch ganz normal, char is ja auch ein ganz normaler numerischer ganzzahliger Datentyp:
Code:
char a = 97; //sollte glaub sowas wie 'a' sein
++a;  // jetzt ist es dann ein Buchstabe weiter
 
ok
das hab ich verstanden. hab sofort an mein Elektronikbuch gedacht als ich das gelesen hab. stichpunkt Digitaltechnik.

Das ++ falsch ist dacht ich mir schon fast.
Ich bin darauf gekommen weil man dur ^ mit 1 ja quasi das nächste ascii zeichen hat.
Deshab ++.

Aber das diese beiden sachen nichts miteinander zu tun haben ist mit jetzt klar.

Kann man dann auch mit UND und ODER genauso verschlüsseln?

Und wie geht das ganze für AnsiStrings?
 
Zuletzt bearbeitet:
Nein kann man nicht, mit Und kann man ja nur Bits entfernen, aber im Ergebnis ist kein Rückschluss zu finden, welche Bits entfernt wurden, welche schon vorher nicht dagewesen sind. Mit Oder kann man nur Bits hinzufügen, ohne dass man hinterher wüsste, welche Bits schon zuvor da waren, welche erst hinzugekommen sind.
 
Zurück