Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 04-11-2021 18:10:03
- Mathieutrccc
- Invité
Codage et Decodage par une fonction mathématique simple python
Bonjour, j'espere que vous allez bien j'aurais un peu besoin d'aide pour de la criptographie tres simple avec python, j'essaye de créer 2 fonctions qui encode et décode une chaine de caractère avec comme clé une fonction mathématique, mais j'ai un problème et je ne comprend pas mon erreur, voici ce que j'ai fais :
texte=("abc")
def code(texte):
return [chr(3*ord(texte[i])-26) for i in range(len(texte))]
print(code(texte))
a=code(texte)
def decode(a):
return [chr((ord(texte[i])+26)/3) for i in range(len(texte))]
print(decode(a))
la fonction utilisé est f(x)= 3x-26 et donc sa réciproque c'est (x+26)/3
le but serais de décoder ce message:
ÁFłĞġİħFłĞĕFijňĕļļĕĉďĞġİěFĶijġİłFÁFŋĉİłFłijFĭĉħĕFġL·FłĞĉł”FñijŅFěŅőL·FĉļĕFłĞĕFĭĉěġďġĉİL·FijĘFłĞĕF|yL·łFďĕİłŅļőpF²ijİ怱łFĪĕłFĉİőłĞġİěFĞijĪĒFőijŅFČĉďħpFÁĭĉěġİĉłġijİFġL·FłĞĕFĪġĭġłpF»ijFijŅłFłĞĕļĕFĉİĒFďļĕĉłĕFL·ijĭĕFĭĉěġďp
Merci de m'aider ^^
#2 04-11-2021 20:14:32
- Rossignol
- Membre
- Inscription : 19-06-2015
- Messages : 290
Re : Codage et Decodage par une fonction mathématique simple python
Bonsoir,
Attention : dans la fonction de déchiffrement, la division / renvoie un flottant.
Pour obtenir un entier il faut utiliser la division des entiers //.
Avec la fonction
return ''.join([chr((ord(a[i])+26)//3) for i in range(len(a))])
on obtient un texte presque lisible :-)
@+
Hors ligne
#3 04-11-2021 20:21:06
- mathieutrccc
- Invité
Re : Codage et Decodage par une fonction mathématique simple python
erreur bête de ma part merci beaucoup, j'avais fais le plus dur... Je voulais savoir si c'était possible de rendre ca plus visuelle, sans le mettre dans une liste? pour ca je crois que je ne peux pas direct mettre return et je dois décomposer non?
#4 04-11-2021 21:04:59
- mathieutrccc
- Invité
Re : Codage et Decodage par une fonction mathématique simple python
et d'ailleurs j'ai un problème avec le texte à décoder, c'est censé être une citation anglaise mais il y a des caractère pour lesquelles ça ne marche pas... J'aurais encore besoin d'aide si c'est possible, merci en tout cas de ta réponse rapide
#5 04-11-2021 21:30:33
- Rossignol
- Membre
- Inscription : 19-06-2015
- Messages : 290
Re : Codage et Decodage par une fonction mathématique simple python
Je ne peux pas mettre le texte en anglais sur le forum, le serveur me jette en considérant que c'est du spam !
Il faut faire les remplacements +, --> o et "E --> s pour obtenir le texte clair.
@+
Hors ligne
#6 04-11-2021 21:37:54
- LeSingeMalicieux
- Membre
- Inscription : 18-01-2015
- Messages : 84
Re : Codage et Decodage par une fonction mathématique simple python
Bonsoir,
Je ne programme pas en Python donc ne pourrai donner de conseils, mais Rossignol connait son sujet :)
Je me suis juste intéressé à la méthode, que je trouve intéressante. Elle ressemble à un chiffre affine, mais sans modulo, et en utilisant les codes Unicode des caractères plutôt que de simples rangs alphabétiques. On peut ainsi chiffrer n'importe quel caractère !
Je me suis amusé à déchiffrer le cryptogramme proposé par Mathieutrccc dans le topic d'en-tête, uniquement avec quelques fonctions Excel (sans programmer en VBA) et voici ce que j'obtiens :
(EDIT : moi non plus je ne peux pas proposer mon texte, j'obtiens un message "No spam please". Il doit y avoir des mots-clefs qui sont refusés. Voici donc mon résultat en image)
Amicalement
Dernière modification par LeSingeMalicieux (04-11-2021 22:02:19)
Hors ligne
#7 04-11-2021 22:06:46
- LeSingeMalicieux
- Membre
- Inscription : 18-01-2015
- Messages : 84
Re : Codage et Decodage par une fonction mathématique simple python
Il faut faire les remplacements +, --> o et "E --> s pour obtenir le texte clair.
Bien entendu je confirme :
Il me reste juste le caractère "ઽ" dans la première phrase.
Hors ligne
#8 04-11-2021 22:12:03
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 100
Re : Codage et Decodage par une fonction mathématique simple python
B'soir
(EDIT : moi non plus je ne peux pas proposer mon texte, j'obtiens un message "No spam please". Il doit y avoir des mots-clefs qui sont refusés)
Tpout à fait...
Il fut un temps pas si lointain, le forum était spammé à répétition par des messages en anglais pour des médicaments...
C'est la seule façon qu'on ait trouvé de tarir le flot...
Sont rayés des cadres plus de 300 mots (surtout de liaison) standards de l'anglais : ça se devait d'être très pénible pour un spammeur (son bot n'étant pas prévu pour ça, il aurait dû faire l'analyse à la main... et il autre chose à faire : il n'insiste plus) parce qu'il doit perdre un temps fou pour repérer une dizaine de mots dans son texte qui bloquent la validation et les remplacer : ce qui n'est pas évident, je le sais bien : c'est moi qui les ai choisis !
Alors, oui, c'est aussi pénible pour le forumeur lambda.
@+
Je peux demander à Fred de mettre temporairement (24 h) l'anti-spam en sommeil et le réactiver
Arx Tarpeia Capitoli proxima...
Hors ligne
#9 04-11-2021 22:35:49
- LeSingeMalicieux
- Membre
- Inscription : 18-01-2015
- Messages : 84
Re : Codage et Decodage par une fonction mathématique simple python
Salut yoshi,
Merci pour les explications !
Pas de souci, comme tu le vois on peut s'en sortir avec des images. L'important est de protéger le forum et que vous ne passiez pas des heures à supprimer des spams à la main.
À+
Hors ligne
#10 05-11-2021 14:14:39
- mathieutrccc
- Invité
Re : Codage et Decodage par une fonction mathématique simple python
Re!
J'ai lu tout vos messages, merci beaucoup ça m'a bien aidé, il me reste une dernière question avant de boucler ce micro programme, c'est pourquoi il y a 2 caractères qui bloquent le décodage, je n'arrive pas trop à comprendre, l'énoncé doit être mauvaise surement mais je ne voit pas comment il traduit par un double caractère...
Sinon, je vous souhaite une agréable journée
#11 05-11-2021 19:50:33
- LeSingeMalicieux
- Membre
- Inscription : 18-01-2015
- Messages : 84
Re : Codage et Decodage par une fonction mathématique simple python
Salut,
Pour les deux caractères qui bloquent, je pense que c'est dû à un problème de formatage ou de réécriture des caractères du message chiffré.
En effet, dans le message chiffré on trouve la suite de deux caractères "ij" pour chiffrer la lettre "o" du clair alors qu'on devrait trouver cet unique caractère "ij" (oui oui tu peux copier/coller, il s'agit bien d'un seul caractère).
De même, la lettre "s" du clair est ici chiffrée par la suite de deux caractères "L·" alors qu'elle devrait l'être par l'unique caractère "Ŀ".
Hors ligne