Le code cĂ©sar Ă©tait utilisĂ© pendant l’antiquitĂ© par les romains pour cacher leurs communications entre militaires.

Cette mĂ©thode consiste Ă  “dĂ©caler” chaque lettre d’un nombre prĂ©cis, oĂč ce nombre k est notre clĂ©.

Ainsi, le code cĂ©sar s’exprimera de cette façon:

  • Chiffrement:
  • DĂ©chiffrement: oĂč:
  • c est le message codĂ©
  • p est le message dĂ©codĂ©
  • k est la clĂ©

On peut alors écrire le code python suivant:

alphabet="abcdefghijklmnopqrstuvwxyz"
 
def numericChar(chain,car):
 
  car = car.lower()
 
  return chain.index(car)
 
def encryptShift(origMessage, key="d"):
 
  encryptedMessage = ""
 
  if key.isalpha():
 
    key = numericChar(alphabet, key)
 
  for car in origMessage:
 
    if car.lower() in alphabet:
 
      encryptedMessage += alphabet[(numericChar(alphabet,car) + key)%26]
 
    else:
 
      encryptedMessage += car
 
  return encryptedMessage

Ainsi, si on chiffre le message It's been fun, Noah avec la clé s, on obtiendra al'k twwf xmf, fgsz

Méthode de déchiffrement

RĂ©ponse Ă  la question “Ecrivez la fonction de dĂ©chiffrement correspondante”

def decryptShift(cryptedMessage, key = "d"):
decryptedMessage = ""
 if key.isalpha():
    key = numericChar(alphabet, key)
  for car in cryptedMessage:
    if car.lower() in alphabet:
      decryptedMessage += alphabet[(numericChar(alphabet,car) - key + 26)%26]
    else:
      decryptedMessage += car
  return decryptedMessage;

Si cette méthode peut sembler utile, il est toutefois trÚs facile de déchiffrer le message par brute force:

def bruteForceShift(m):
  for k in alphabet:
    print(decryptShift(m, k))
 
bruteForceShift("al'k twwf xmf, fgsz")

On obtiendra alors:

al'k twwf xmf, fgsz
zk'j svve wle, efry
yj'i ruud vkd, deqx
xi'h qttc ujc, cdpw
wh'g pssb tib, bcov
vg'f orra sha, abnu
uf'e nqqz rgz, zamt
te'd mppy qfy, yzls
sd'c loox pex, xykr
rc'b knnw odw, wxjq
qb'a jmmv ncv, vwip
pa'z illu mbu, uvho
oz'y hkkt lat, tugn
ny'x gjjs kzs, stfm
mx'w fiir jyr, rsel
lw'v ehhq ixq, qrdk
kv'u dggp hwp, pqcj
ju't cffo gvo, opbi
it's been fun, noah   <===
hs'r addm etm, mnzg
gr'q zccl dsl, lmyf
fq'p ybbk crk, klxe
ep'o xaaj bqj, jkwd
do'n wzzi api, ijvc
cn'm vyyh zoh, hiub
bm'l uxxg yng, ghta

Aussi, si nous faisons:

encryptShift("Get me a vanilla ice cream, make it a double.", "6")

Nous obtiendrons alors mkz sk g bgtorrg oik ixkgs, sgqk oz g juahrk.

Ce message peut ĂȘtre dĂ©codĂ© par les clĂ©s 6, 32, 58, 84
 Pourquoi? Car ces 4 nombres ont un point commun, ils peuvent ĂȘtre exprimĂ© par

Cette mĂ©thode peut ĂȘtre testĂ©e et validĂ©e pour toutes les clĂ©s et tout les messages possibles.