Comment décrypter simple de chiffrement XOR
J'ai trouvé le suivant XOR fonction de cryptage sur 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]);
}
}
Il fonctionne parfaitement, mais je tiens à décrypter la chaîne aussi.
Par exemple:
void xor_decrypt(char *key, char *encrypted_string)
{
//decrypt method goes here
}
Donc, fondamentalement, après je me chiffrer la chaîne, je voudrais utiliser la même clé de cryptage pour décrypter précédemment chaîne cryptée.
Je suis assez nouveau dans la programmation et je voudrais juste savoir comment décrypter précédemment chaîne cryptée. Merci, toute aide est très appréciée.
Résoudre l'équation
Votre problème est de comprendre comment les
a = b ^ c
pour b
.Votre problème est de comprendre comment les
XOR encryption
œuvres, et non pas la partie programmation.OriginalL'auteur user3101398 | 2013-12-14
Vous devez vous connecter pour publier un commentaire.
L'une des choses cool sur le cryptage XOR, c'est que lorsque vous l'appliquez deux fois, vous obtenez de retour de la chaîne d'origine – voir http://en.wikipedia.org/wiki/XOR_cipher.
Dans votre fonction, xor_decrypt, vous prenez de la chaîne et de la clé et de la chaîne de retour ^ clé. Si, maintenant, vous xor qu'avec la clé à nouveau, vous obtenez (string ^ clé) ^ key = string ^ (clé ^ key) = string ^ d'identité = chaîne
(par les propriétés de l'opérateur XOR: http://en.wikipedia.org/wiki/Exclusive_or#Properties)
Ainsi, vous pouvez simplement exécuter votre fonction, xor_encrypt, une seconde fois sur la sortie de la première xor_encrypt.
a ^ a == 0 ^ 0 == un, de sorte que la déclaration tient toujours. (Ré-exécution de la fonction une seconde fois pour revenir à la chaîne d'origine.)
lorsque la chaîne cryptée a un 0, qui sera considéré comme la fin du fichier (par la fonction comme écrit ci-dessus) et le déchiffrement d'arrêt. C'est pourquoi je préconise (dans ma réponse - sous "avertissement 1: les caractères null") en gardant l'original de la longueur de la chaîne dans une variable plutôt que de compter sur
strlen
qui sera le mal, sur la chaîne codée lorsque keyChar == stringChar. Je maintiens ce que j'ai dit.Bon point, je corrige la position des mains.
OriginalL'auteur dmitrig01
Avec XOR, le déchiffrement est exactement la même opération que le chiffrement. Exécutez la chaîne cryptée par le biais de la
xor_encrypt
méthode de nouveau la même touche) et vous avez le texte en clair en arrière.avertissement 1: les caractères null
Une chose à surveiller: si le caractère dans la chaîne correspond au caractère correspondant dans la clé, votre résultat sera
'\0'
. Ce sera interprété par votre code actuel comme la "fin de chaîne" et pourrait arrêter le déchiffrement court. Pour contourner cela, vous voulez passer la longueur de la "véritable" chaîne de caractères en paramètre à ta fonction.avertissement 2: court-clés
Vous voulez également vous assurer que vous ne courez pas après la fin de votre clé, si le texte est très longue, vous pourriez avoir à répéter la clé. Vous pouvez faire cela avec le
%
opérateur - il suffit de recycler la clé à partir du début.Ici est un exemple qui montre que ces techniques:
(Pas de réaliser le problème avec kay == chaîne de caractères) des résultats tronqués de déchiffrement (le
i
dansplain
les matches de la même lettre danskey
):Laissant de côté la ligne que j'ai marqué ci-dessus (c'est à dire, en gardant la valeur de
n
que l'original de la longueur de la chaîne), le résultat estexactement comme vous le souhaitez.
OriginalL'auteur Floris