Cryptage et decryptage C++ - C++ - Programmation
Marsh Posté le 27-11-2012 à 22:54:48
Ben simplement parcourir ta chaîne de caractère (string est un peu comme un tableau, tu peux accéder aux différents caractères avec [ ]) et appliquer le décalage + modulo
Marsh Posté le 27-11-2012 à 23:41:39
Imagine tu as
string MaChaine="bonjour!";
Tu as besoin de parcourir ta chaine et par exemple, remplacer les o par des u :
Code :
|
Après ce traitement, MaChaine sera "bunjuur!"
Donc je te laisse imaginer comment implémenter ton algo
Marsh Posté le 28-11-2012 à 00:02:29
Mais là apparemment j'ai besoin de la table Ascii non ?
Comment je fais pour considérer directement une lettre par rapport à une valeur ?
En faite , on a pas vu encore le chapitre sur la vrai classe string . On est sur les tableaux/pointeurs . On doit se débrouiller quoi ^^
Marsh Posté le 28-11-2012 à 02:13:44
Un truc écrit vite fait:
Code :
|
Si tu fais cela avec des tableaux et des pointeurs, alors qu'il s'agit de chaines de caractères, et qu'il y a string::iterator pour se balader dans une string, tu as la malchance d'avoir un cours de C déguisé en cours de C++.
A+,
Marsh Posté le 28-11-2012 à 11:34:04
Salut .
Aujourd'hui 4h de TP , on a vu la méthode utilisé avec seulement du C++ , et non pas du C !
Voilà pour ceux qui la souhaite :
Code :
|
Marsh Posté le 28-11-2012 à 12:28:26
Citation : if (message[i] >='A' && message[i] <='Z' ) |
C'est ce que je fais, de manière plus simple, avec if (isupper(message[i]))
Et pour le reste, c'est la même technique, sauf que la, c'est toujours du C déguisé en C++ (ie qui utilise cin, cout et getline au lieu de stdin, stdout et gets).
à tête reposée, mon code pouvait se simplifier:
Code :
|
La solution de ton exercice
- parle de cryptage décryptage, mais ne fait que le cryptage et pas le décryptage.
- ne vérifie pas que la clé rentrée est un chiffre valide
Notes que ce cryptage est souvent aussi étendu aux chiffres. Avec mon code, il suffirait de rajouter
else if (isdigit(*it)) {
*it = '0' + modulo(*it - '0' + cle, 10);
}
A+,
Marsh Posté le 28-11-2012 à 13:08:48
Salut , merci de ta réponse .
Mon programme crypte et décrypte .
On écrit le message a crypter , puis on met la cle , le message crypé apparait .
On réeouvre le programme , on met le message crypté , on fait le sens inverse de la cle ( si on a cripté k=2 , alors là ça sera k=-2 , et notre message de base apparait .
Testé sur "Bonjour" avec k=2
Marsh Posté le 28-11-2012 à 14:32:05
Bien sur, je me doute que ça décrypte en mettant la clé en négatif, vu que c'est le principe de l'algo, mais c'est nul comme interface, de demander la clé, et en fait d'attendre l'inverse de la clé.
A+,
Marsh Posté le 07-12-2012 à 23:50:40
Salut
En prenant du recul , je pense vraiment que ton script est de premier choix ! Il est vraiment pas mal !
D'ailleur j'ai essayé de crypter/decrypter une série de nombre avec isdigit , mais cela n'a pas l'air de bien fonctionner .
Par ailleur , je me demandais si la clé pouvait être une des caracteres ? Du genre cle="bongo" .
Merci d'avance de ton attention !
Marsh Posté le 08-12-2012 à 00:33:37
Tu as fait ceci comme remplacement:
for (string::iterator it = message.begin(); it < message.end(); ++it) {
if (isupper(*it)) {
*it = 'A' + modulo(*it - 'A' + cle, 26);
}
else if (islower(*it)) {
*it = 'a' + modulo(*it - 'a' + cle, 26);
}
else if (isdigit(*it)) {
*it = '0' + modulo(*it - '0' + cle, 10);
}
}
J'ai pas testé, mais ça devrait marcher. [EDIT: j'ai testé et ça marche]
La clé ne peut pas être des caractères non numériques avec ce type de cryptage, puisque décaler de clé n'a plus de sens ici.
Par contre tu as des méthodes de cryptages du même genre, mais un peu plus poussées, ou cela est possible:
Au lieu de décaler chaque caractère d'une valeur constante, la clé, modulo qque chose, on décale chaque caractère d'une longueur variable, le caractère courant de la clé (sur laquelle on avance en boucle caractère par caractère).
On a traité récemment le sujet ici: http://forum.hardware.fr/hfr/Progr [...] 8091_1.htm
A+,
Marsh Posté le 08-12-2012 à 00:54:06
Salut , d'accord , merci !
Par contre , comment tu cryptes/decryptes avec digit , tu me donnes un exemple ?
Edit : vôtre lien est un programme en c , non pas en c++
Marsh Posté le 08-12-2012 à 01:17:35
Ben rien ne changes la pour le cryptage décryptage avec digit, j'appliques le même principe qu'avec les lettres, sauf que le modulo est par rapport a 10.
Bon, on peut améliorer ton algo, qui ne permute que les minuscules entre elles, les majuscules entre elles, et les chiffres entre eux, en utilisant un alphabet global pour permuter:
Code :
|
Et la c'est du C++.
Et en poussant un peu plus loin, on arrive facilement au cas ou la clé est une chaine, qui déclenche un décalage variable:
Code :
|
A+,
Marsh Posté le 08-12-2012 à 10:40:28
Waw ! J'adore ton travail !
Merci encore , je vais faire mumuse
Marsh Posté le 27-11-2012 à 22:21:44
Programme C++ Cryptage/Decrytage et césar
Message édité par Bloupies le 28-11-2012 à 11:33:08