Cifrario di Cesare

Da Hacknowledge.

Indice

[modifica] L'origine e il funzionamento

Il cifrario detto 'di Cesare' è il semplicissimo metodo di crittazione che l'imperatore Giulio Cesare si dice usasse per la sua corrispondenza privata, secondo alcuni solamente durante il conflitto in Gallia, per altri (Svetonio) in tutte le sue lettere riservate. Il sistema è un codice monoalfabetico sostitutivo dove una lettera dell'alfabeto viene sostituita con quella che la segue di tre posti.

[modifica] L'alfabeto cifrato

L'alfabeto dunque, risulta crittato in questo modo. Ovviamente ne latino venivano usate solo lettere maiuscole, volendo riproporlo al giorno d'oggi andrebbero inserite le lettere dello stampatello minuscolo. Il cifrario di cesare non critta i segni di punteggiatura.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

Seguendo questo schema, la frase:

IMPARIAMO( )IL( )CIFRARIO( )DI( )CESARE

Diventerà allora:

LPSDULDPRLOFLIUDULRGLFHVDUH

[modifica] Il cifrario in un programma

Proviamo a sviluppare un semplice programma in python che esegua codificazione e decodificazione del cifrario di cesare, partendo da due alfabeti differenti per comprendere facilmente l'algoritmo. Volendo implementare il programma si puo usare il piu breve metodo accennato in Note.

import os
 import sys
 
 os.system('CLS')
 alfabeto=[",",".","-","_","?","!","a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n",
 "N","o","O","p","P","q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y","z","Z"]
 
 alfabetocritt=[",",".","-","_","?","!","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n","N","o","O","p","P",
 "q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y""z","Z","a","A","b","B","c","D"]
 
#In questa prima parte si importano i moduli necessaro e si imposta nel programma l'alfabeto crittato(affabetocritt) e normale (alfabeto), in questo
#caso completi di maiuscole e minuscole  e segni di punteggiatura (così che si possano inserire nella frase di partenza e vengano riprodotti nella
#seconda). Nei cifrari non si usano gli spazi, ma se si volessero riprodurre sarebbe sufficiente aggiungere ai due alfabeti " ".
 
 def crypt():
   os.system('CLS')
   testo = raw_input ("\nInserisci la frase da criptare...\n")
   critt=""
   for r in range(0,len(testo)):
         for i in range(0,len(alfabeto)):
             current_chr=testo[r:r+1]
             if current_chr==alfabeto[i]:
                critt=str(critt)+str(alfabetocritt[i])
 
   print "Stringa criptata: ",critt
   opz = input("\nCosa vuoi fare ora? \n 1. Cripta un'altra frase \n 2. Decripta una frase \n 3. Esci\n\n ")
   if opz==1:
     crypt()
   if opz==2:
     decrypt()
   if opz==3:
     sys.exit()
 
#In questa parte vine definita la funzione che critta le parole sostituendo, col range, le lettere del perimo alfabeto, con quelle dell'alfabeto
#crittato e poi segue il modulo per consentire la sclta sul da farsi.
 
 def decrypt():
  os.system('CLS')
  testo = raw_input ("\nInserisci la frase da decriptare...\n")
  critt=""
  for r in range(0,len(testo)):
        for i in range(0,len(alfabetocritt)):
            current_chr=testo[r:r+1]
            if current_chr==alfabetocritt[i]:
               critt=str(critt)+str(alfabeto[i])
 
  print "Stringa criptata: ",critt
  opz = input("\nCosa vuoi fare ora? \n 1. Cripta una frase \n 2. Decripta un'altra frase \n 3. Esci\n\n ")
  if opz==1:
    crypt()
  if opz==2:
    decrypt()
  if opz==3:
    sys.exit()
 
#Qui viene definita la seconda funzione che permette di decrittare una frase, costruita collo stesso metodo della prima, invertito.
 
 print "-----------------------------------------------------------------------"
 print "\n - Caesar ROT3 1.0 by cyber_daemon -"
 print "-----------------------------------------------------------------------"
 opz = input("\nCosa vuoi fare? \n 1. Cripta una frase \n 2. Decripta una frase \n 3. Esci\n\n ")
 if opz==1:
  crypt()
 if opz==2:
  decrypt()
 if opz==3:
  sys.exit()

[modifica] Note

  • Nell'uso moderno, viene indicato come metodo di Cesare ogni cifrario sostitutivo che ne segua il metodo, pur cambiandone il numero di caratteri dello 'slittamento'. Nel nostro alfabeto di 26 lettere sono di conseguenza possibili 25 differenti cifrari di Cesare.

Volendo riprodurre questo in un programma si possono riscrivere i vari alfabeti, tenendo il metodo alfabetico, e fornire a chi lo usa la possibilita di sceglire il numero di caratteri oppure, cambiando il codice, indicare semplicemente, dato il primo alfabeto decrittato, far sceglire il numero di caratteri operando direttamente sull'alfabeto stesso collo schema

(c+k)%256
c = il carattere di partenza
k = incremento da utilizzare
  • Il noto sistema, unico a slittamento ancora in uso, ROT-13 è un'evoluzione del cifrario di Cesare.
Strumenti personali