Nome utente:  
Password:  
Iscriviti 
Oggi è mar 2 giu 2020, 0:06

Tutti gli orari sono UTC + 1 ora [ ora legale ]



Apri un nuovo argomento Rispondi all’argomento  [ 4 messaggi ] 
  Stampa pagina Precedente | Successivo 
Autore Messaggio
 Oggetto del messaggio: [PY] Cifrario di Cesare
MessaggioInviato: lun 12 lug 2010, 0:55 
Non connesso
Moderatore
Avatar utente

Iscritto il: lun 9 feb 2009, 23:29
Messaggi: 509
Per diletto ed esercizio ho implementato l'algoritmo che utilizzava Cesare per inviare i suoi messaggi.
Per chi non conoscesse il Cifrario di Cesare consiglio di dare una lettura con la spiegazione dell'algoritmo: Cifrario di Cesare. Da qui deriva il ben noto standard ROT-13.

Lo script è in python e sicuramente si può fare di meglio, ma funziona abbastanza bene : Wink :

Per utilizzarlo salvare lo script in un file con estensione .py e avviarlo da terminale nel seguente modo:
Codice:
python cifrario.py


Codice:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#       
#       Copyright 2010 crypt3m4
#       
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#       
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#       
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.


 
def crypt():
   frase = raw_input("\n\tInserisci la frase da cifrare: ")
   pad = raw_input("\n\tInserisci lo spostamento: ")
   pad = int(pad)%26
   cifrata=""   
   for i in range(0, len(frase)):
      lettera = ord(frase[i])
      if  (lettera < 65 or lettera > 90) and (lettera < 97 or lettera > 122):
         cifrata+=chr(lettera)
         continue
      dec = lettera+int(pad)      
      if (dec > 90 and lettera < 91) or (lettera > 96 and dec > 122):
         dec -=26            
      cifrata+=chr(dec)
      
   print "\n\tLa frase cifrata e': ",cifrata
   return
   
def decrypt():
   frase = raw_input("\n\tInserisci la frase da decifrare: ")
   pad = raw_input("\n\tInserisci lo spostamento: ")
   pad = int(pad)%26
   decifrata=""
   for i in range(0, len(frase)):
      lettera = ord(frase[i])
      if  (lettera < 65 or lettera > 90) and (lettera < 97 or lettera > 122):
         decifrata+=chr(lettera)      
         continue
      dec = lettera-int(pad)      
      if (dec < 65 and lettera < 90) or (lettera > 96 and dec < 97):
         dec +=26            
      decifrata+=chr(dec)
      
   print "\n\tLa frase decifrata e': ",decifrata
   return   
 
print "\n\t------------------------------------"
print "\n\t - Cifrario di CESARE - "
print "\n\t  (Xl nsp nlkkz npcnlgt)"
print "\n\t------------------------------------"
print "\n\n\t1. Cripta una frase\n\t2. Decripta una frase\n\t3. Esci\n\n "
opz = int(raw_input("\n\tSeleziona un'opzione: "))
if opz==1:
  crypt()
if opz==2:
  decrypt()
if opz==3:
  quit()
quit()
 



Un metodo molto simile lo usava Provenzano nei suoi pizzini, come descritto nella pagina di WikiPedia.

Saluti, Crypt3m4

_________________
www.soluzionifacili.info - La soluzione al tuo problema
TheHostWeb - Lo spazio ideale per il tuo Sito Web.


Top
 Profilo  
 
 Oggetto del messaggio: Re: [PY] Cifrario di Cesare
MessaggioInviato: lun 12 lug 2010, 20:34 
Non connesso
Super Moderatore
Avatar utente

Iscritto il: sab 2 feb 2008, 1:23
Messaggi: 7349
Ottimo crypt3m4 : Thumbup : : Thumbup :


Saluti
radio3

_________________
Immagine


Top
 Profilo  
 
 Oggetto del messaggio: Re: [PY] Cifrario di Cesare
MessaggioInviato: lun 12 lug 2010, 20:54 
Non connesso
noob
Avatar utente

Iscritto il: dom 27 giu 2010, 21:23
Messaggi: 42
buono...un buon allenamento di programmazione in pyton.....


Top
 Profilo  
 
 Oggetto del messaggio: Re: [PY] Cifrario di Cesare
MessaggioInviato: mar 4 gen 2011, 0:21 
Non connesso
noob

Iscritto il: gio 11 mar 2010, 16:14
Messaggi: 5
Complimenti!
Solo una curiosità... Come mai usi la forma int(raw_input("...")) ? Non potresti usare direttamente input("...") ?
E un altro piccolo consiglio: l'ultima parte, dopo le funzioni, prova a cambiarla così: : Thumbup :

Codice:
import os
import time

def clear():
  status=os.system("cls")
  # se si usa windows sostituire 'clear' con 'cls'

def esci():
  scelta=raw_input("Uscire? [S/N] ").lower()
  if scelta=="s":
    return 1
  else:
    return 0

while 1:
  clear()
  print "\n\t------------------------------------"
  print "\n\t - Cifrario di CESARE - "
  print "\n\t  (Xl nsp nlkkz npcnlgt)"
  print "\n\t------------------------------------"
  print "\n\n\t1. Cripta una frase\n\t2. Decripta una frase\n\t3. Esci\n\n "
  opz = input("\n\tSeleziona un'opzione: ")
  if opz==1:
    crypt()
    if esci():
      break
    continue
  if opz==2:
    decrypt()
    if esci():
      break
    continue
  if opz==3:
    quit()
  else:
    clear()
    print "ATTENZIONE!\nL'opzione selezionata (%d) non e' valida!\n\nAttendere..." %(opz)
    time.sleep(4)



[EDIT] Ho corretto il codice, c'era un errore di indentatura... : Chessygrin :


Top
 Profilo  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 4 messaggi ] 

Tutti gli orari sono UTC + 1 ora [ ora legale ]


Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi

Cerca per:
Vai a:  
cron




Copyright © 2007 by saverioweb feat. BigDaD.