Décodage fonction affine

ber3n1c3 -  
 ber3n1c3 -
Bonjour,

j'ai un projet isn consistant en créer deux programmes afin de codage et décodage avec une fonction affine. Le codage est okay, cependant le décodage est impossible: j'ai un programme, mais il ne fonctionne pas. Si quelqu'un pouvait jeter un coup d'oeil au programme et voir si il y voit une erreur, ce serait super.

merci d'avance


def Modulo(a):
for c in range(0,25):
R=a*c
if R==1%26:
return c


def FonctionAffineDécodage (a,b,m):
n=''
c=Modulo(a)
for i in range (0,len(m)):
if ord(m[i])!=32:
N=ord(m[i])-65
x=c*(N-b)
L=x+65
n=n+chr(L)
else:
n=n+m[i]

return n



a=int(input('variable a ='))
b=int(input('variable b ='))
m=str(input('le message à décoder est ='))
print('le message décodé est ',FonctionAffineDécodage(a,b,m))






A voir également:

1 réponse

KX Messages postés 19031 Statut Modérateur 3 020
 
Bonjour,

Pour comprendre ce qui ne va pas avec ton décodage il faudrait aussi voir comment tu as fait ton encodage.

PS. Attention au vocabulaire, le cryptage c'est autre chose.
0
ber3n1c3
 
def FonctionAffineCodage (a,b,m):
n='' #il faut initialisé la variable n
for i in range (0,len(m)):
if ord(m[i])!=32:
N=ord(m[i])-65
J=(a*N)+b
K=(J%26)
L=K+65
n=n+chr(L)
else:
n=n+m[i]


return n


a=int(input('variable a ='))
b=int(input('variable b ='))
m=str(input('le message à coder est ='))
print('le message codé est ',FonctionAffineCodage(a,b,m))


voila mon programme de codage ;) merci
d'accord j'y ferai plus attention
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Donc en gros, ce que tu fais c'est convertir tes caractères (A=65, B=66...) en chiffres puis tu appliques le (dé)codage avant de revenir aux caractères.

Codage → c(x,a,b) ≡ a.x+b [26]
Décodage → d(y,a,b) ≡ (y-b).a⁻¹ [26]

Alors je ne connais pas Python, mais je pense que R==1%26 est incorrect.
Il faudrait plutôt écrire R%26==1

Remarque : si b peut-être quelconque (entre 1 et 26) par contre il faut choisir a correctement, car pour que ça fonctionne on doit avoir pgcd(a, 26) = 1
C'est à dire a ∈ { 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25 }
Ce qui donne les couples (a, a⁻¹) = { (1,1), (3, 9), (5, 21), (7, 15), (11, 19), (25, 25) }

Remarque : perso j'étendrais le cas de l'espace if ord(m[i]) != 32 à tout les autres caractères que A-Z puisque ce sont les seuls qui peuvent être (dé)codés.
0
ber3n1c3 > KX Messages postés 19031 Statut Modérateur
 
je vois, mais il persiste à ne pas vouloir multiplier par c, et à afficher cela
Traceback (most recent call last):
File "E:\Projet\FonctionAffineDécodage.py", line 27, in <module>
print('le message décodé est ',FonctionAffineDécodage(a,b,m))
File "E:\Projet\FonctionAffineDécodage.py", line 14, in FonctionAffineDécodage
x=c*(N-b)
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'


et même lorsque je change de variable, que je mets int, il ne l'enlève pas et je ne vois vraiment pas pourquoi.

c'est une très bonne idée d'appliquer à tous les caractères, je vais peut être vous la piquez ;)
merci beaucoup pour ce que vous avez déjà fait et que vous avez pris sur votre temps pour répondre
0