Cifrario di Cesare

Vedi la discussione

Codifica 1

Dal Piaz
Gdo#Sld}

Osserva

  • Ogni carattere del messaggio in chiaro viene sostituito con il carattere 3 posizioni più avanti
  • I caratteri non alfabetici e le ultime lettere dell’alfabeto diventano caratteri strani
def cesare(m):
    mm = ""
    for c in m:
        mm += chr(ord(c)+3)
    return mm

Decodifica

def cesare_(m):
    mm = ""
    for c in m:
        mm += chr(ord(c)-3)
    return mm

Codifica 2

Dal Piaz
Gdo Sldc

Osserva

  • Le lettere maiuscole e le lettere minuscole crescono di 3 posizioni: delta=delta+3
  • Se si supera la lettera Z (z) si ricomincia dalla A (a): delta=delta%26
  • Tutti gli altri caratteri rimangono inalterati
def cesare(m): 
    ord_a = ord('a')
    ord_A = ord('A')
    mm    = "" 
    for c in m:
        if(c >= 'A') and (c <= 'Z'):
            delta = ord(c)-ord_A
            delta = (delta+3)%26 
            c     = chr(ord('A')+delta) 
        elif(c >= 'a') and (c <= 'z'): 
            delta = ord(c)-ord_a 
            delta = (delta+3)%26 
            c     = chr(ord('a')+delta)
        mm += c
    return mm

Codifica 3

Due stringhe contengono ordinatamente le lettere corrispondenti alla cifratura

#        ABCDEFGHIJKLMNOPQRSTUVWXYZ    Originale
UPPER = "DEFGHIJKLMNOPQRSTUVWXYZABC" # Codificato
#        abcdefghijklmnopqrstuvwxyz    Originale
LOWER = "defghijklmnopqrstuvwxyzabc" # Codificato

def cesare(m): 
    ord_a = ord('a')
    ord_A = ord('A')
    mm    = "" 
    for c in m:
        if(c >= 'A') and (c <= 'Z'): 
            c = UPPER[ord(c)-ord_A] 
        elif(c >= 'a') and (c <= 'z'): 
            c = LOWER[ord(c)-ord_a]
        mm += c
    return mm