Cryptage par inversion de bits

Soyez le premier à donner votre avis sur cette source.

Vue 6 755 fois - Téléchargée 501 fois

Description

Ce programme implémente un petit algorithme de cryptage que j'ai mis au point il ya de ça quelques années.
On prend par exemple la chaîne 'Bonjour'
Le programme va parcourir la chaîne, lettre par lettre. Prenons l'exemple de 'B' :
Imaginons que B s'écrive en binaire 01100100
Comme c'est la première lettre, on va inverser le premier bit :
01100100 > 11100100
Pour 'o', comme c'est la deuxième lettre, on va inverser le deux premiers ; pour 'n', les trois premiers, et ainsi de suite...
Il ne prend pas de clé utilisateurs, et comme le principe est le même pour le codage comme le décodage, entrer une chaîne codée va la décoder, et vice-versa.

Conclusion :


Le principale désavantage de ce programme est son originalité... Comme il n'y a pas besoin de clé, la même chaîne codée n'importe quand et n'importe où donnera exactement la même chaîne codée.
MAJ : Maintenant, ça lit un fichier et l'encode directement. Il suffit de spécifier son chemin.
Les commentaires sont les bienvenus.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
11
Date d'inscription
mercredi 14 mai 2003
Statut
Membre
Dernière intervention
18 novembre 2008

Je vais faire le chieur mais a mon avis le decoupage du code en plusieur fonctions en aurai ameliorer la lisibilite ;)

Autre petite remarque je ne sais pas si le fait de reecrire la fichier plutot que d'en creer un autre soit une tres bonne chose, c'est un coup a perdre des donnees ca.

Sinon l'algo est plutot bien pense et le code bien commente, c'est cool :)
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

Saros, pour réduire la taille de mon EXE avec DevC++ j'ajoute:
-s
aux options de compilation, j'ai appris ça sur cppfrance, je sais plus qui m'a dit que ça permettait au compilo de transférer au lieur tout ce qu'il ne connaissait pas, et que comme ça ce qui n'est pas utilisé n'est pas compilé. en général ça réduit la taille du fichier exe de moitié.

essayes de faire ça avec VC++, il doit bien y avoir un champ "options de compilation" ds les options du projet.
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

Mise à jour.
Je ne sais pas si mettre l'exe compilé est avantageux, étant donné qu'à lui seul il fait 520ko... Si ça gêne vraiment certains, postez un commentaire.
Essayer avec le fichier test.txt
Un grand merci à Kiruaet à djl.
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

OK, merci beaucoup pour les infos.
Je tiens à remarquer qu'avec printf et scanf, le programme fonctionne tout à fait correctement (je ne l'ai pas mis sur le site), le seul ennui c'est que j'utilise une variable char sOrg[256], donc on ne peut pas taper plus de 255 caractères (+1 pour le nul).
Je vais voir pour les fichiers, essayer d'améliorer le code et le cas échéant mettre à jour la source.
A+
Saros
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

STD = la bibliothèque standard du C++, en font partie (entre autre):

iostream
fstream
istringstream
string
...

à côté de ça tu as aussi la STL (Standard Template Library):

vector
deque
stack
list
map
.............. et un tas d'autres

ces librairies sont les standards du C++, il est bon de les utiliser pour favoriser l'uniformisation des codes. Printf, Scanf, ... tout ça c'est la lib standard du C, c'est dommage de les utiliser quand on fait du beau code C++ tout propre, ça casse un peu l'ambiance je trouve ;-)

en fait, pour utiliser cin, cout ... tu mets tjs ça:
#include
using namespace std; //cette ligne indique que par défaut, quand tu utilises un objet, il fait partie de l'espace de nom std, ça évite de tapper ça:
std::cout << ...

:: est l'opérateur de résolution de portée, mais c'est lourd à écrire alors...


une remarque par rapport au code que j'ai tappé ds le msg précédent: le caractère NULL (0) a sauté à cause de l'anti-slash (il est temps que ce bug soit fixé), évidemment, le dernier paramètre de getline est: '"ANTISLASH"0'

cplusplus est un excellent site, je ne peux plus m'en passer, et faut vrmnt que les gens utilisent les libs standards, parce que sinon, c'est plus un standanrd, sgnif :-( si tlm utilise sa lib, ça devient impossible de lire les codes sources des autres, même si c'est partout du C++, on s'y retrouve plus.


une note par rapport à ton programme plus directement:
je pense qu'un programme d'encodage devrait surtout coder/décoder des fichiers, plutôt que de demander à l'utilisateur de tapper son message. Moi je te propose de te renseigner sur cplusplus.com sur l'utilisation de <fstream> pour les flux de fichiers.

ça aura plusieurs avantages directs:
- tu restes ds le beau et pur C++ ;-)
- tu peux déterminer la taille du fichier, donc tu ne dois plus demander à l'utilisateur de savoir combien de caractères il y a dans son texte (à ce sujet, en haut je me suis trompé: c'est LONGUEUR+1, il faut de la place pour le caractère nul)
- l'utilisateur ne doit pas tapper son texte, surtout s'il s'agit de décryptage ça devient horrible de tapper Ç si on sait pas à quel code ASCII ça correspond
- plus de problème de flux arrêté à l'espace, mais remarque que les flux de fichiers avec la STD sont très semblables aux flux vers/de la console, ainsi:

cin >> variable;
mais aussi:
fichier >> variable;

donc tu devras qd même utiliser getline, en calculant d'abord la taille du fichier (avec les méthodes de déplacement de la "tête de lecture" du fichier, tout est expliqué sur cplusplus.com)

bien à toi

Kirua
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.