Bonsoir,

j'aurais besoin d'aide pour l'algorithme du DES.
Voici l'énoncé que j'ai :
Donner le programme permettant de chiffrer un message via DES, puis de le déchiffrer.
L'utilisateur saisit son message, son mot de passe (c'est à dire un tableau de clés). Les permutations seront définies dans le code source du programme (celles de votre choix). Les permutations inverse seront calculées par le programme. Il est demandé d'expliquer en détail comment a été déterminé l'algo de déchiffrement.

A la base il s'agit d'un message ASCII par blocs de 8 caractères en 16 tours avec l'algorithme DES.

En classe, nous avions fait un algo pour deux permutations en classe. J'ai repris la même chose sauf que cette fois-ci j'insère 16 permutations.
Ca ne marche pas je ne sais pas vraiment comment faire...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mot_clair=input("Saisir votre message secret:")
 
tperm=[[2,1,0],[1,0,2],[2,2,2],[3,1,1],[1,2,2],[3,2,1],[3,3,3],[2,0,3],[4,0,1],[4,3,2],[1,1,1],[4,5,2],[5,0,0],[3,3,1],[5,0,1],[4,4,4]]       
tcles=[[4,1,9],[35,2,8],[33,5,4],[5,20,37],[2,7,6],[22,21,25],[21,22,23],[10,13,15],[2,2,1],[11,11,11],[12,13,24],[20,20,20],[25,23,24],[14,14,14],[7,8,9],[5,2,3]]
 
def permute(m,perm): #m et perm ont meme longueur
	return "".join([m[perm[i]] for i in range(len(m))
 
def Vigenere(m,cle): #m et cle ont meme longueur
	return "".join([chr((ord(m[i])+cle[i])%256) for i in range(len(m))])
 
def DES_BLOC(m,tperm,tcles):
	p=len(m)//2
	for i in range(len(tperm)):
		m=m[p:p+p]+Vigenere(permute(m[0:p],perm[i]),tcles[i])
	return m
 
def DES_phrase(phrase,tperm,tlces,LBloc):#LBloc=2p
	phrase+=(LBloc-len(phrase)%LBloc)*" "
	phrase_crypte=""
	for i in range(0,len(phrase),LBloc): 
		phrase_crypte+=DES_bloc(phrase[i:i+LBloc],tperm,tcles)
	return phrase_crypte
Svp si quelqu'un pouvait m'aider ...