Cryptographie par substitution polyalphabetique (randriano)

Soyez le premier à donner votre avis sur cette source.

Vue 9 908 fois - Téléchargée 817 fois

Description

J'ai beau cherché un programme de cryptographie par substitution alphabétique mais j'ai pas trouvé, il y en a beaucoup sur Vigénère et RSA.
Programmé sous C++ Builder
1) Primo, il permet de crypter/décrypter une chaîne de caractères
2) Secundo, il permet de crypter/décrypter des fichiers texte (*.txt)

Pour ceux qui ne connaissent pas cet algorithme, il est basé sur une matrice appelée abaque:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
Le code vous l'expliquera!
Ce programme est aussi un moyen d'apprendre à utiliser un SPLASHSCREEN (voir le fichier Crypto.cpp).

Conclusion :


Il y a deux classes employées ici
1) PolyAlphabetique.h => pour le chiffrement de chaînes
2) PolyAlphabetique2.h => pour le chiffrement des fichiers texte
Cette 2ème classe est plus riche car son abaque est une matrice 162x162 des caractères reconnus (accentués, cedille).

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
54
Date d'inscription
vendredi 13 avril 2007
Statut
Membre
Dernière intervention
26 juillet 2011

J'ai apporté une grande modification à ce code comme la classe TAbaque et l'utilisation de AnsiString!

Je vais vous demander les amis:
Qu'est ce que c'est vraiment les erreurs C++ E2129, E...
Elles ne sont pas claires car n'indiquent pas précisement la ligne de code ou l'identificateur qui cause l'erreur.
Messages postés
54
Date d'inscription
vendredi 13 avril 2007
Statut
Membre
Dernière intervention
26 juillet 2011

En effet, j'avoue Brunews que j'ai oublié delete.
La version 2.0 est proche mais un problème:

[C++ Erreur fatale] sysmac.h(8): F1003 Erreur de directive : Do not include this file directly. Include 'system.hpp'.

J'ai créé une classe TAbaque qui sera un membre statique de la classe TPolyAlphabetique:
cette erreur apparaît à la définition de cette membre:
TAbaque * TPolyAlphabetique::abaque=new TAbaque();
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
"strcat est une boucle, pas la peine de les REfaire inutilement."
Je parlais bien entendu de "strlen".
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Une petite question. C'est pas ce qu'on appelle le code Rome ce mode de cryptage ?

YOYO, @+.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Bien de vouloir s'élever mais faudra d'abord coder correctement.

void PolyAlphabetique::buildstrkey()
{
int lk = strlen(cle);
int ltxt;
char *tmp = new char[255];
if(strlen(textclair) > strlen(textcrypte)) ltxt = strlen(textclair);
else ltxt = strlen(textcrypte);
int d = ltxt / lk;
int m = ltxt % lk;
for(int i = 0; i < d; i++) strcat(chainecle, cle);
if(m > 0) strncpy(tmp, cle, m);
strcat(chainecle, tmp);
chainecle[ltxt] = 0; //finir chainecle par le kre nul
}

char *tmp = new char[255];
Où est le delete correspondant ???

if(strlen(textclair) > strlen(textcrypte)) ltxt = strlen(textclair);
else ltxt = strlen(textcrypte);
strcat est une boucle, pas la peine de les REfaire inutilement.

for(int i = 0; i < d; i++) strcat(chainecle, cle);
d fois le reparcours complet de chainecle, contreproductif absolu.
char *c, *d;
d = chainecle;
for(int i = 0; i < d; i++) {
c = cle;
while(*d = *c++) d++;
}
Voila sans aucun reparcours stérile de chainecle.

Bonne continuation.
Afficher les 6 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.