Bonjour,

En voulant apprendre le python, je me suis mis à la cryptographie. J'ai donc fait un petit script pour chiffrer des fichiers texte. Or, j'ai un problème mathématique.

Pour donner le contexte, le programme fonctionne comme suit:
1) On charge le fichier;
2) On extrait un à un les caractères, puis on les met dans une liste;
3) Pour chaque caractère de la liste, on regarde quel est son rang dans l'alphabet (une autre liste prédéfinie), puis on sauvegarde ce nombre dans une nouvelle liste;
4) Pour chaque nombre de cette liste nouvellement créée (avec les nombres), on effectue une opération dessus puis on sauvegarde le résultat dans une nouvelle liste (encore une!);
5) On convertit ce nombre en caractère, puis avec tous les caractères encodés on crée le message codé (chaîne de caractères), mais peu importe.

Opérations similaires mais inversées pour décoder.

À l'étape 4, un problème survient (du moins je crois).
L'idée est de prendre tous les nombres d'une liste, de leur faire subir une transformation (ici une fonction), puis d'enregistrer les résultats:
Voici le code correspondant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
def encoding_calculus(liste, n, s): #une liste, un nombre, un autre nombre (entiers)
	chaine_code = []
	for i in range(0, n):
		k = (int(decimal.Decimal(i**3+i**2-13*i-11+liste[i])))%s
		chaine_code.append(k)
	return chaine_code
Et pour décoder:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
def decoding_calculus(liste, n, s): #pareil
	chaine_decode = []
	for i in range(0, n):
		k = (int(decimal.Decimal(-i**3-i**2+13*i+11+liste[i])))%s
		chaine_decode.append(k)
	return chaine_decode
Le problème est qu'après encodage et décodage, certains caractères ne sont pas les mêmes (certains: ponctuellement, je dirais que 97% d'entre eux sont bien les mêmes dans le texte original et après encodage, puis décodage).
Je suis sûr que l'erreur vient des 2 fonctions ci-dessus. La fonction d'encodage est en fait un polynôme de degré 3 à coefficients entiers. Et je ne comprends pas d'où vient l'erreur. J'ai essayé de contrer les erreurs d'arrondi dûes au binaire (avec decimal), rien n'y fait. Lorsque je passe la fonction en afine (autrement dit (k=a+liste[i])%s ), tout marche.
Pourquoi ça ne marche pas ???
Je suis à court d'idées. Quelqu'un aurait la solution ?
C'est là où j'en viens au bibliothèques mathématiques: dois-je en utiliser une ??
Merci d'avance

PS: Je pourrais donner le script entier (qui n'est pas non plus très long), pour plus de détails, mais je ne pense pas que ce soit utile. Si ça vous intéresse, dites-le moi, ou si plus de détails sont necéssaires.