Cryptage/Decryptage fichier XOR

amp;

Premium
Inscription
4 Juillet 2016
Messages
192
Réactions
99
Points
241
RGCoins
25
Bonjour RealityGaming !

Aujourd'hui j'ai conçu un petit programme très court sur le cryptage/decryptage XOR d'un fichier et j'ai décidé de le poster, même si ça peut être utile à ne serait-ce qu'une personne.

Ça peut toujours être utile lorsqu'on veut crypter un fichier de configuration d'un jeu, dont on a pas forcément envie que les utilisateurs y touchent, à moins que l'utilisateur le decrypte en decompilant le programme pour ainsi trouver la clé.

Principe du fonctionnement XOR

Le fonctionnement est très simple, imaginons une variable de type mdp :

string mdp{"mdp"}; qui correspond à 01101101 01100100 01110000 en binaire


Une clé (qui va permettre de crypter/decrypter le programme) :

char key='x'; Qui correspond a 01111000 en binaire


La table de vérité de XOR :
false + false = false
false + true = true
true + false = true
true + true = false


Sachant que true = 1, false = 0.
Ensuite on va comparer la variable mdp avec la key (qui va se dupliquer autant de fois qu'il le faut c'est à dire) :
mdp ------------> 01101101 01100100 01110000
key -------------> 01111000 01111000 01111000 (on peut voir que la key se duplique)
Grâce à la table-> 00010101 00011100 00001000

Le message crypté en binaire sera donc : 00010101 00011100 00001000

Pour les personnes qui ne comprennent pas se que je dit, voici un lien qui pourra vous expliqué tous ça ;)


Explication de mon code :

Code:
#include <iostream>
#include <fstream>
int main(void)
{
    std::fstream inFile("file.txt",std::ios::in | std::ios::binary); //Ouvre le fichier en lecture
        if(inFile.is_open()) //Si le fichier est ouvert
        {
            std::string encrypted{""};
            char key{'o'}; //Key en forme de smyle 'o'
            std::string file( (std::istreambuf_iterator<char>(inFile) ),
                     (std::istreambuf_iterator<char>() ) );
//Stocke tous ce qui est écrit dans le fichier dans le std::string file.
                    //Encryption
                    for(int i {0};i<file.size();i++)
                    {
                        encrypted += file[i] ^ (int(key) + i) % 20;
                    }
                    std::fstream outFile("bonjour.txt",std::ios::out | std::ios::binary); //Ouvre le fichier en écriture (donc écrase le fichier déjà existant)
                    outFile << encrypted << std::endl; //Insère le std::string file encrypté.
                outFile.close();
                inFile.close();
        }
    else
    {
        std::cerr << "Cannot open the file 'file'" << std::endl;
    }
}

Le fonctionnement est très simple :
Lis le fichier, le stocke dans une variable, l'encrypte, écrase le fichier.txt par le même texte mais crypter.

Pour le decrypter, il suffit de recompiler.

Voilà c'est tous pour moi ;)

Passez une bonne journée sur reality-gaming.fr !
r00tGunz
 
Dernière édition:
En theorie, si tu cryptes/hash, tu n'es pas cense pouvoir de-crypter/de-hasher ;)

tu as fail ton BBCODE ;)
 
En theorie, si tu cryptes/hash, tu n'es pas cense pouvoir de-crypter/de-hasher ;)

tu as fail ton BBCODE ;)
Je suis d'accord avec toi, dans ce topic c'est plutôt un partage de source ;)

J'ai rectifier les bbcodes ;) merci pour l'info
 
Merci du partage
C'est pas de cryptage mais plutôt du encodage/obfuscation

Donc :
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0

01101101 01100100 01110000
+
01111000 01111000 01111000
=
00010101 00011100 00001000

ça j'ai compris,
mais pour faire l'inverse en manuel je n'est pas compris ?
 
Dernière édition:
Retour
Haut