Cryptage avec le chiffre de césar

Contenu du snippet

Cryptage et decryptage basé sur le chiffre de césar ( voir http://fr.wikipedia.org/wiki/Chiffre_de_C%C3%A9sar )

Source / Exemple :


#!/usr/bin/python
# -*- coding:Utf-8 -*-
from string import upper

class Crypto:
	"""Cryptage utilisant le chiffre de césar
	ch = chaine, d = décalage"""
	def __init__(self, ch, d):
		self.ch, self.d = ch, d
		#On initialise les dictionnaires. Correspondance pour crypter, decorrespondance pour décoder
		self.correspondance = {}
		self.decorrespondance = {}
		
		#On construit les listes. alpha = alphabet normal. ald = alphabet avec le décalage
		self.alpha = [chr(x) for x in xrange(97, 123)]
		self.ald = [self.alpha[(i+self.d)%26] for i in xrange(26)] #Utilisation du modulo pour éviter le OutOfRange
		#Construction de correspondance
		for x in xrange(26):
			self.correspondance[self.alpha[x]] = self.ald[x]
		
	def inverser_dico(self):
		"""Construction du dictionnaire decorrespondance en inversant clé/valeur de correspondance afin d'accéder à la traduction"""
		for (k, v) in self.correspondance.items():
			self.decorrespondance[v] = k
		return self.decorrespondance

	def code(self, p):
		"""Coder et décoder le texte"""
		self.new_ch = []
		self.inverser_dico()
		for car in self.ch:
			if car is ' ':
				self.new_ch.append(' ')
			else:
				if p is True:
					self.new_ch.append(self.correspondance[car])
				else: 
					self.new_ch.append(self.decorrespondance[car])

		return self.new_ch

if __name__ == "__main__":
	while 1:
		chx = raw_input("Voulez (C)rypter ou (D)écrypter votre texte : ")
		if chx.upper() == 'C':
			x = True
		elif chx.upper() == 'D':
			x = None
		else:
			print "Mauvais choix !"
			break
		
		decalage = raw_input("De combien de lettres voulez vous décaler votre code : ")
		if decalage.isdigit():
			txt = raw_input("Veuillez entrer votre texte :\n")
			a = Crypto(txt.lower(), int(decalage))
		else:
			print "Vous devez entrer un nombre !"
			break
		
		try:
			a.code(x)
			print ''.join(a.code(x))
		except:
			print "Vous ne devez rentrer que des lettres !"
			break
				
		r = raw_input("Autre texte à coder ( 1: Oui, Entrée: Non ) : ")
		if r == '1':
			continue
		else:
			break

Conclusion :


Voilà, c'est ma toute première source et un de mes tout premiers vrais programmes ( même si je fais quelques autres petits trucs autour, c'est le seul utile )

J'ai vu qu'il existait d'autre source portant sur le même thème, mais ce n'est pas la même méthode je crois.
Donc voilà, j'attend vos commentaires

A voir également

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.

Du même auteur (cs_ara3n)