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 :
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
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
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 :
Pour les personnes qui ne comprennent pas se que je dit, voici un lien qui pourra vous expliqué tous ça
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
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 !
r00tGunzLis 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 !
Dernière édition: