begin process at 2010 09 04 17:43:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & cryptage

 > CRYPTAGE AVEC LE CHIFFRE DE CÉSAR

CRYPTAGE AVEC LE CHIFFRE DE CÉSAR


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité & cryptage Classé sous :césar, cryptage, cryptographie, chiffre, simple Niveau :Débutant Date de création :07/11/2007 Date de mise à jour :07/11/2007 20:51:10 Vu :5 718

Auteur : ara3n

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Cryptage et decryptage basé sur le chiffre de césar ( voir http://fr.wikipedia.org/wiki/Chiffre_de_C%C3%A9sar )

Source

  • #!/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
#!/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


 Historique

07 novembre 2007 20:51:10 :
Léger problème de commentaire ^^

 Sources du même auteur

RENOMMER DES FICHIERS EN MASSE

 Sources de la même categorie

Source avec Zip CRYPTEUR CARRE DE POLYBE par Dipx
Source avec une capture HORAIRESRESTREINTS par lonewolfs
Source avec Zip HIDS EN PYTHON par KimbleMandel
CRYPTEUR EN PYTHON par tallgenius
STEGANOGRAPHIE par Marnage

 Sources en rapport avec celle ci

Source avec Zip CRYPTEUR CARRE DE POLYBE par Dipx
Source avec Zip Source avec une capture I.A. (DÉBUTANT) par Rano Its
Source avec Zip Source avec une capture LES CONTES DE MONTE CRYPTO par amaury74
Source avec Zip Source avec une capture CHIFFRE DE VIGENÈRE par benitoelputoamo
Source avec Zip Source avec une capture CHIFFRE DE VIGENÈRE par VladislavIV

Commentaires et avis

Commentaire de mumupy le 28/11/2007 21:04:56

Bonjour,
Je pense que tu aurais pu simplifier ton code en utilisant la fonction ord(). Elle retourne la valeur ascii d'un caractère.
Ex: print ord('a') affiche 97.

Commentaire de ara3n le 05/12/2007 20:25:53

Merci de ton commentaire. Effectivement, je m'en suis rendu compte après, mais j'ai estimé qu'il était préférable de la laisser ainsi. J'ai pensé que certains débutants pourraient être intéressé par la technique, et si j'avais utiliser ord() ou chr(), elle aurait été identique à une autre source de ce site :)

Cordialement :)

Commentaire de poof65 le 26/01/2008 23:06:52

En plus court il y a ça

def cesar(ch, d): return ''.join([chr(ord(l)+d) for l in ch])

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Librairie graphique vectoriel [ par DoudouBidou ] Bonjour, j'ai depuis quelques jour un projet en tête, celui de réaliser un logiciel de saisi de schéma électrique en python. Cryptage DES [Python] [ par Kadaj676 ] Bonjour j'aimerais savoir si vous aviez de la documentation sur des algo's de cryptage. Principalement DES, et je voudrais vosu demander, si il est po Cryptage xor [ par sorcier0011 ] Bonjour,J'aimerais bien faire un petit crypteur de texte xor mais je n'arrive pas a trouver comment convertir des lettres en Ascii. Parce que apart fa calcul matriciel simple [ par gwenc_hlan ] bonjour,    comment peut on faire sous Python du calcul matriciel simple ? (additionner, multiplier ou inverser des matrices). faut - il impérativeme opération simple ...et pourtant compliquée...et pourtant simple...et p.... [ par dojh ] Bonjour à tousEn pleine initiation Python, mais aussi en prise de tête, mais c'est bien, ça fait travailler le cerveau...L'idée, c'est qu'avec l'impor Problème de calcul simple [ par vaggarath ] Bonjour bonjour. Voilà j'ai un problème tout c*n, j'en suis sur... En fait je fais un boutton qui procède à un calcul suivant les valeurs rentrées au paralléliser une simple fonction [ par Viny12 ] Bonjour, Je suis novice en python et j'aimerais savoir comment paralléliser une simple fonction qui calcule une jacobienne de sorte que le calcul pui [Programme Python] Cryptage RSA (cherche codeur) [ par GelH ] Bonjour, Je recherche un codeur Python capable de réaliser un programme de cryptage/décryptage d'une chaine de caractère utilisant l'algorithme RSA.


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales