Cryptographie
Fermé
ParaNova
Messages postés
3
Date d'inscription
dimanche 6 avril 2014
Statut
Membre
Dernière intervention
7 avril 2014
-
Modifié par ParaNova le 6/04/2014 à 18:19
ParaNova Messages postés 3 Date d'inscription dimanche 6 avril 2014 Statut Membre Dernière intervention 7 avril 2014 - 7 avril 2014 à 17:53
ParaNova Messages postés 3 Date d'inscription dimanche 6 avril 2014 Statut Membre Dernière intervention 7 avril 2014 - 7 avril 2014 à 17:53
3 réponses
Aranud87
Messages postés
18033
Date d'inscription
dimanche 29 octobre 2006
Statut
Contributeur
Dernière intervention
7 juin 2020
3 294
6 avril 2014 à 18:17
6 avril 2014 à 18:17
Salut,
Pour des questions de visibilité, merci d'utiliser les balises code :
<code >
</code >
Pour des questions de visibilité, merci d'utiliser les balises code :
<code >
</code >
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
7 avril 2014 à 00:09
7 avril 2014 à 00:09
Bonsoir,
"Utilisant un modulo, je ne peux pas faire l'inverse du modulo "
Mathématiquement ce n'est pas vrai. L'inverse modulaire existe, mais tu ne dois pas prendre n'importe quelle valeur de a. Il faut que u existe tel que a*u ≡ 1 [26] pour pouvoir faire y ≡ a*x+b [26] pour le cryptage et x ≡ (y-b)*u [26] pour le décryptage.
Passons à ta formule :
Ton parenthèsage me dérange. Tu devrais plutôt avoir :
Ce qui en se décomposant donne :
Remarque : pour plus de lisibilité dans ton code tu devrais mettre directement 'A' à la place de 65, on comprendrais mieux le rôle de cette valeur.
"Utilisant un modulo, je ne peux pas faire l'inverse du modulo "
Mathématiquement ce n'est pas vrai. L'inverse modulaire existe, mais tu ne dois pas prendre n'importe quelle valeur de a. Il faut que u existe tel que a*u ≡ 1 [26] pour pouvoir faire y ≡ a*x+b [26] pour le cryptage et x ≡ (y-b)*u [26] pour le décryptage.
Passons à ta formule :
MessageCode = MessageCode + (char)((((a * MessageInter[i]) -65 + b) %26) +65);
Ton parenthèsage me dérange. Tu devrais plutôt avoir :
MessageCode = MessageCode + (char) ((a*(MessageInter[i]-65)+b)%26+65);
Ce qui en se décomposant donne :
char c = MessageInter[i]; int x = c - 'A'; int y = (a*x + b) % 26; char d = y + 'A';
Remarque : pour plus de lisibilité dans ton code tu devrais mettre directement 'A' à la place de 65, on comprendrais mieux le rôle de cette valeur.
ParaNova
Messages postés
3
Date d'inscription
dimanche 6 avril 2014
Statut
Membre
Dernière intervention
7 avril 2014
7 avril 2014 à 07:24
7 avril 2014 à 07:24
Merci de ta réponse,
Je changerai le 65 par le A.
Le problème avec l'inverse modulaire, c'est que le but est que pour n'importes quelles valeurs de a et de b, je puisse décrypter: d'ou l'idée de tableau, mais je n'ai pas encore réussi a le terminer
Je changerai le 65 par le A.
Le problème avec l'inverse modulaire, c'est que le but est que pour n'importes quelles valeurs de a et de b, je puisse décrypter: d'ou l'idée de tableau, mais je n'ai pas encore réussi a le terminer
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
7 avril 2014 à 07:50
7 avril 2014 à 07:50
Mathématiquement tu ne pourras pas décrypter si a n'est pas inversible.
Par exemple si a=2 (non inversible), tu peux avoir x=6 et x=19 qui donneront tous les deux y=12+b.
Donc si ton cryptage donne y=12+b, tu ne pourras pas décrypter car tu ne sauras pas si x=6 ou 9.
Tu auras ce genre de problème pour toutes les valeurs de a qui ne sont pas inversibles !
Si tu veux creuser l'idée de ton tableau, cherches toi un module n qui accepte autant de nombres inversibles que de valeurs de a autorisées. Dans ce cas b pourra prendre n'importe quelle valeur entre 1 et n.
Par exemple, si tu veux conserver n=26, il n'y aura que 12 inverses possibles (même si certains comme 1 ou 25 sont peu intéressants). Tu pourrais donc limiter le choix de a à 10 et associer à chaque valeur de a choisie l'un des 10 inverses que tu auras mis dans ton tableau.
Par exemple si a=2 (non inversible), tu peux avoir x=6 et x=19 qui donneront tous les deux y=12+b.
Donc si ton cryptage donne y=12+b, tu ne pourras pas décrypter car tu ne sauras pas si x=6 ou 9.
Tu auras ce genre de problème pour toutes les valeurs de a qui ne sont pas inversibles !
Si tu veux creuser l'idée de ton tableau, cherches toi un module n qui accepte autant de nombres inversibles que de valeurs de a autorisées. Dans ce cas b pourra prendre n'importe quelle valeur entre 1 et n.
Par exemple, si tu veux conserver n=26, il n'y aura que 12 inverses possibles (même si certains comme 1 ou 25 sont peu intéressants). Tu pourrais donc limiter le choix de a à 10 et associer à chaque valeur de a choisie l'un des 10 inverses que tu auras mis dans ton tableau.
ParaNova
Messages postés
3
Date d'inscription
dimanche 6 avril 2014
Statut
Membre
Dernière intervention
7 avril 2014
7 avril 2014 à 17:53
7 avril 2014 à 17:53
Oui je voit ce que tu veux dire
Je vais déjà essayer de décrypter avec certaines valeurs de a qui marchent et si j'ai le temps ensuite, je chercherais une solution a ce problème. Sinon je parlerais de ça comme une limite
Je vais déjà essayer de décrypter avec certaines valeurs de a qui marchent et si j'ai le temps ensuite, je chercherais une solution a ce problème. Sinon je parlerais de ça comme une limite