Chiffre de vigenère

0/5 (3 avis)

Vue 13 597 fois - Téléchargée 567 fois

Description

Bonjour à tous ! Face au nombre un peu faiblard de codes disponibles en Python, j'ai décidé de déposer quelques-unes de mes sources sur le site, histoire d'enrichir un peu les catégories. Enfin on va essayer :)

Première source : un simple chiffreur / déchiffreur basé sur le chiffre de Vigenère, fonctionnant sur les codes ASCII. Un classique.

Source / Exemple :


# -*- coding:Latin-1 -*-
entree = raw_input("Chaine a traiter : ")
while entree != "quit":
	cle = raw_input("Cle a utiliser : ")
	operation = raw_input("Coder / decoder ? (1/2)")
	sortie, i = "", 0
	for caract in entree:	#parcours de la chaîne à traiter
		if operation == "1":	#chiffrement
			sortie = sortie + chr((ord(caract) + ord(cle[i])) % 256)
			i = i + 1	#parcours de la clé
			if i > len(cle) - 1:
				i = 0	#fin de clé atteinte, on repart au début
		elif operation == "2":	#déchiffrement
			sortie = sortie + chr((ord(caract) - ord(cle[i])) % 256)
			i = i + 1
			if i > len(cle) - 1:
				i = 0
	print entree,"\n",cle,"\n",sortie,"\n"
	entree = raw_input("Chaine a traiter : ")

Codes Sources

A voir également

Ajouter un commentaire Commentaires
VladislavIV Messages postés 16 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 1 mai 2007
15 mai 2007 à 09:31
Bien sûr !
sortie, i = "", 0 est une série d'affectations. J'aurai pu écrire
sortie = ""
i = 0

% est l'opérateur "modulo" : x % y renvoie le reste de la division de x par y.

chr( ( ord(caract) + ord(cle[i]) ) % 256 )

L'objectif est d'obtenir un caractère codé, en faisant la "somme" d'un caractère en clair et d'un caractère de la clé.
clair + clé = code
J'additionne donc les codes ascii, puis je fais % 256 pour obtenir une valeur entre 0 et 256 -> on retombe sur la table ascii. On peut alors utiliser chr() pour obtenir le caractère correspondant, codé.

En espérant être clair ;)
doudou3158 Messages postés 95 Date d'inscription mercredi 29 juin 2005 Statut Membre Dernière intervention 12 mai 2007
12 mai 2007 à 19:18
Dsl pour le double post, mais en faite ce qui me gene c'est le %256 je comprend pas ce qui vien faire la...
doudou3158 Messages postés 95 Date d'inscription mercredi 29 juin 2005 Statut Membre Dernière intervention 12 mai 2007
12 mai 2007 à 19:16
Pourrai-tu détailler ce passega stp :

sortie = sortie + chr((ord(caract) + ord(cle[i])) % 256)

Je sais que ord() retourne la valeur ascii d'un caractère et que chr() et sont contraire.

Et puis cette ligne ci aussi :

sortie, i = "", 0

Désolé je suis débutant en python..

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.