Wie zum entschlüsseln einfache XOR-Verschlüsselung
Fand ich die XOR-Verschlüsselung-Funktion auf dem internet:
void xor_encrypt(char *key, char *string)
{
int i, string_length = strlen(string);
for(i=0; i<string_length; i++)
{
string[i]=string[i]^key[i];
printf("%i", string[i]);
}
}
Funktioniert es perfekt, aber ich möchte zum entschlüsseln der string auch.
Beispiel:
void xor_decrypt(char *key, char *encrypted_string)
{
//decrypt method goes here
}
Also im Grunde, nachdem ich das verschlüsseln der Zeichenfolge, würde ich die gleichen Schlüssel zum entschlüsseln der bereits verschlüsselten string.
Ich bin ziemlich neu im Programmieren und ich würde einfach gern wissen, wie das entschlüsseln der bereits verschlüsselten string. Vielen Dank, jede Hilfe ist geschätzt.
- Lösen Sie die Gleichung
a = b ^ c
fürb
. - Ihr ärger ist zu verstehen, wie
XOR encryption
funktioniert, nicht die Programmierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer der coolen Dinge über XOR-Verschlüsselung ist, dass, wenn Sie es anwenden zweimal, erhalten Sie wieder die ursprüngliche string – siehe http://en.wikipedia.org/wiki/XOR_cipher.
In Ihrer Funktion, xor_decrypt, nehmen Sie eine Schnur und Schlüssel und die Rückgabe-string ^ - Taste. Wenn jetzt Sie, dass xor mit dem Schlüssel wieder, Sie bekommen (string ^ - Taste) ^ key = "string ^" (Taste ^ - Taste) = "string ^" Identität = string
(von den Eigenschaften der XOR-operator: http://en.wikipedia.org/wiki/Exclusive_or#Properties)
So, Sie können einfach laufen Ihre Funktion, xor_encrypt, ein zweites mal auf den Ausgang des ersten xor_encrypt.
strlen
werden falsch auf die codierte Zeichenfolge, wenn keyChar == stringChar. Ich stehe zu dem, was ich sagte.Mit XOR, das entschlüsseln ist genau der gleiche Vorgang wie das verschlüsseln. Führen Sie die verschlüsselte Zeichenfolge durch die
xor_encrypt
Methode wieder demselben Schlüssel), und Sie haben die nur-text zurück.Warnung 1: null-Zeichen
Einer Sache zu beachten: wenn die Zeichen in der Zeichenfolge entspricht, die entsprechenden Zeichen im Schlüssel, wird Ihr Ergebnis sein
'\0'
. Diese werden interpretiert, indem Sie Ihre aktuellen code als "end of string" und aufhören würde, die Entschlüsselung kurz. Um dies zu umgehen, werden Sie wollen, übergeben Sie die Länge des "eigentlichen" string als parameter an Ihre Funktion.Warnung 2: kurz-Tasten
Möchten Sie auch sicherstellen, dass Sie nicht führen Sie über das Ende Ihrer Schlüssel - wenn die nur-text ist sehr lang, müssen Sie möglicherweise wiederholen Sie die-Taste. Sie können dies tun, mit der
%
operator - einfach recyceln Sie die Taste von Anfang an.Hier ist ein vollständiges Beispiel, das zeigt, dass diese Techniken:
Diese (nicht ahnend, das problem mit kay == string) führt zu verkürzten Entschlüsselung (die
i
implain
entspricht dem gleichen Buchstaben inkey
):Verlassen die Zeile, die ich markiert oben (D. H., halten Sie den Wert der
n
als die ursprüngliche Länge des Strings), Ihr Ergebnis istgenau so, wie man es erwarten würde.