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
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.