CRYPTAGE PAR INVERSION DE BITS

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 13 déc. 2003 à 09:33
cs_chris223 Messages postés 11 Date d'inscription mercredi 14 mai 2003 Statut Membre Dernière intervention 18 novembre 2008 - 28 déc. 2005 à 15:52
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18674-cryptage-par-inversion-de-bits

cs_chris223 Messages postés 11 Date d'inscription mercredi 14 mai 2003 Statut Membre Dernière intervention 18 novembre 2008
28 déc. 2005 à 15:52
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 :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
14 déc. 2003 à 21:56
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.
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
14 déc. 2003 à 20:15
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.
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
14 déc. 2003 à 17:59
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
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
14 déc. 2003 à 12:44
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
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
14 déc. 2003 à 11:12
Cher Kirua :
-Merci pour ton commentaire, je vais essayer de le compiler ; cependant, je l'ai déjà reprogrammé en utilisant _cscanf et _cprintf, ça marche très bien, mais je ne sais pas que préférer, cin/cout ou printf. J'ai cru entendre dire que cin et cout sont plus compatibles, mais bon...
-C'est quoi la STD ?
-Le site que tu m'as passé est excellent, mieux organisé que la MSDN... Merci beaucoup !
Saros
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
14 déc. 2003 à 00:57
euhm, pour récupérer plus que jusqu'au pemier espace, tu fais ça:
(je suppose que tu programmes avec la STD)

cin.getline(variable, longueur, delimiteur);

alors tu fais par exemple:

(demande quelle est la longueur du texte)
cin >> LONGUEUR;
char *texte = new char[LONGUEUR];
cin.getline(texte, LONGUEUR, ''); //le caractère 0 comme délimiteur, donc plus l'espace

.. encodage (un cryptage sans clef n'est pas un cryptage, c'est un encodage) ...

delete[] texte;


je garantis pas que ce soit sans faute, j'ai tappé ça directement ds le formulaire de comment, j'ai jamais compilé ça.


pour getline: http://www.cplusplus.com/ref/iostream/istream/getline.html
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
13 déc. 2003 à 14:30
le top serait d'avoir l'exe dans le zip, pour ceux qui(comme moi ) ont la fleme de decompacter le zip pour compiler!
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
13 déc. 2003 à 13:37
Voilà c'est fait (et encore merci)
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
13 déc. 2003 à 13:20
Je vais mettre a jour le zip dans 20 min (j'ai fait une bourde).
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
13 déc. 2003 à 13:15
OK, merci beaucoup.
J'ai oublié de dire, au cas où ça pourrait entraîner des frustrations : compilé avec VC++ 6.0.
Saros
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
13 déc. 2003 à 09:33
ouai ba c'est bien iNumChrs = sOrg.length(); qu'il faut faire
Rejoignez-nous