Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # --------[ pacy - Password & Account CYpher ]--------
- #
- # Diluisce le lettere di account/user/pass (ognuno su una riga dedicata) con
- #+ caratteri stampabili casuali.
- # Il passo di ogni singola linea e determinato da un 'pin' di tre cifre
- # ============================================================================ #
- # { sezione IMPORT }
- import string
- import sys
- import random
- import os.path
- # ============================================================================ #
- # { Dichiarazione VARIABILI }
- # _________ VALORI DI DEFAULT _________
- LINE=60
- PIN="543"
- FILE="en-pacy.txt"
- # versione
- VERSION="1.0"
- # _________ titoli _________
- # programma
- TITLE="\n\t================[ P.A.CY. ]================\n"
- TITLE=TITLE+"\t ::( Password & Account Cypher )::\n"
- TITLE=TITLE+"\t\t\t\t -{ ver. %s }-\n" % VERSION
- # funzioni
- TCOD="\n\t_________________________________________\n"
- TCOD=TCOD+"\t_______ Funzione di codifica dati _______\n"
- TDEC="\n\t____________________________________________\n"
- TDEC=TDEC+"\t_______ Funzione decodifica del file _______\n"
- TPER="\n\t________________________________________\n"
- TPER=TPER+"\t_______ Cambio valori di default _______"
- # _________ Testi dell'Help _________
- # opzioni
- HOPT="\t-c\tcifratura - comportamento di default\n"
- HOPT=HOPT+"\t-d\tdecode - legge e decodifica il file\n"
- HOPT=HOPT+"\t-h\thelp - stampa l'aiuto completo\n"
- HOPT=HOPT+"\t-p\tpersonalize - permette di modificare i valori di default prima di procedere\n"
- # versione estesa
- LHELP="\nNAME\n"
- LHELP=LHELP+"\tpacy.py - Password & Account CYpher (python module)\n"
- LHELP=LHELP+"\nSYNOPSIS\n"
- LHELP=LHELP+"\tpython pacy.py [OPTION]\n"
- LHELP=LHELP+"\nDESCRIPTION\n"
- LHELP=LHELP+"\tLo scopo di 'pacy' e' quello di fornire una \"pseudoencryption\" con semplice file\n"
- LHELP=LHELP+"\tdi testo; occulta dati di account diluendo le lettere significative all'interno di\n"
- LHELP=LHELP+"\tstringhe di caratteri stampabili generati casualmente.\n"
- LHELP=LHELP+"\tL'attuale file di riferimento: %s\n" % FILE
- LHELP=LHELP+"\tIl file viene trattato secondo il seguente schema:\n"
- LHELP=LHELP+"\t\t+ Ad ogni account vengono dedicate tre righe\n"
- LHELP=LHELP+"\t\t\t1. nome dell'account (gmail, facebook, ecc...)\n"
- LHELP=LHELP+"\t\t\t2. username\n"
- LHELP=LHELP+"\t\t\t3. password\n"
- LHELP=LHELP+"\t\t+ il 'pin' di tre cifre determina il passo con il quale leggere le tre\n\t\t righe rispettivamente\n"
- LHELP=LHELP+"\t\t+ passo=0 implica che la riga non conterra' alcun dato significativo\n"
- LHELP=LHELP+"\t\t+ passo=1 implica che ogni lettera e' significativa, in altre parole il\n\t\t dato e' in chiaro\n"
- LHELP=LHELP+"\t\t+ entrambi i valori sono vietati per la riga della password\n"
- LHELP=LHELP+"\nOPTIONS\n"
- LHELP=LHELP+HOPT
- LHELP=LHELP+"\nNOTA\n"
- LHELP=LHELP+"\tpacy NON garantisce alcuna reale sicurezza crittografica.\n"
- LHELP=LHELP+"\tdi fornire un file per il trasporto di account che sia decifrabile ad occhio nudo\n"
- LHELP=LHELP+"\tConoscendo il passo, ovvero quante lettere saltare prima di trovare quella\n"
- LHELP=LHELP+"\tsignificativa, e' possibile estrarre i dati senza bisogno di visualizzarli in chiaro.\n"
- LHELP=LHELP+"\nIMPORTANTE\n"
- LHELP=LHELP+"\tPer evitare di indebolire ulteriormente la sicurezza del file sarebbe necessario\n"
- LHELP=LHELP+"\tseguire almeno questi consigli basilari:\n"
- LHELP=LHELP+"\t\t+ La riga 'account' e' stata inserita per comodita', ma dato che conterrebbe nomi\n"
- LHELP=LHELP+"\t\t conosciuti (google, facebook, twitter, ecc...) sarebbe meglio NON usarla;\n"
- LHELP=LHELP+"\t\t+ Non usare passi uguali; es. pin come '333' o '777' sono altamente sconsigliati\n"
- LHELP=LHELP+"\t\t+ La funzione di decodifica (parametro '-d') e' stata inserita SOLO per agevolare\n"
- LHELP=LHELP+"\t\t l'uso sul proprio PC casalingo\n"
- LHELP=LHELP+"\t\t+ Esercitatevi ad eseguire l'estrazione a occhio nudo; lo scopo di pacy e' proprio\n"
- LHELP=LHELP+"\t\t quello di evitare l'uso di software e pin da digitare.\n"
- # help rapido
- SHELP="pacy> Opzioni disponibili:\n"
- SHELP=SHELP+HOPT
- # ============================================================================ #
- # { Definizione FUNZIONI }
- def none():
- return []
- # _________ setta valori di default _________
- def setval():
- p1=int(PIN[0])
- p2=int(PIN[1])
- p3=int(PIN[2])
- ln=LINE
- return [ln,p1,p2,p3]
- # _________ flussa i parametri _________
- # ma cosa ho scritto? LOL!
- def ckarg(argv):
- lval=[]
- if argv:
- if mode.has_key(argv[0]):
- lval=mode[argv[0]]()
- else:
- print "pacy> Opzione non valida!"
- print SHELP
- sys.exit(1)
- if not lval:
- lval=setval()
- return lval
- # _________ personalize _________
- # imposta i valori immessi dall'utente
- def pers():
- p1=p2=p3=ln=-1
- print TPER
- while True:
- try:
- while p1<0 or p1>9:
- p1 = int(raw_input("pin1: "))
- while p2<0 or p2>9:
- p2 = int(raw_input("pin2: "))
- while p3<2 or p3>9:
- p3 = int(raw_input("pin3: "))
- while ln<10 or ln>80:
- ln = int(raw_input("line: "))
- break
- except ValueError:
- print "pacy> ERROR: inserire numeri interi"
- return [ln,p1,p2,p3]
- # _________ help rapido _________
- def olhelp():
- print LHELP
- sys.exit(0)
- # _________ decode _________
- # decodifica il file e stampa a video
- def decode():
- dtxt=""
- c=1
- print TDEC
- s=raw_input("\tModifico i valori di default ([y] per confermare)?")
- if s=="y":
- lval=pers()
- else:
- lval=setval()
- try:
- ofil=open(FILE,"r")
- clin=ofil.readline()
- while len(clin):
- dlin=decy(clin,lval[c])
- if not dlin:
- dlin="-- null --"
- if dlin[-1]!="\n":
- dlin=dlin+"\n"
- dtxt=dtxt+dlin
- if c==3:
- c=1
- else:
- c+=1
- clin=ofil.readline()
- ofil.close()
- print "pacy> Output:"
- print "------8<----------------"
- print dtxt,
- print "---------------->8------"
- sys.exit(0)
- except IOError:
- print "pacy> Errore nell'apertura del file. Assicurarsi che esista"
- print " e che sia presente nel perscorso attuale."
- print "pacy> Esecuzione terminata."
- sys.exit(1)
- def decy(clin,step):
- t=0
- dlin=""
- if step:
- for c in clin:
- if not t%step:
- dlin=dlin+c
- t+=1
- return dlin
- # _________ calcola i caratteri disponibili _________
- def calc(lval):
- nc1=nc2=0
- print "pacy> Configurazione:"
- if lval[1]==0:
- print "\tLinea account NON presente"
- else:
- nc1=int(lval[0]/lval[1])
- print "\tLinea account %i caratteri max" % (nc1)
- if lval[2]==0:
- print "\tLinea user NON presente"
- else:
- nc2=int(lval[0]/lval[2])
- print "\tLinea user %i caratteri max" % (nc2)
- nc3=int(lval[0]/lval[3])
- print "\tLinea password %i caratteri max" % (nc3)
- lval.append(nc1)
- lval.append(nc2)
- lval.append(nc3)
- return lval
- # _________ acquisisce i dati in chiaro _________
- def acdata(lval):
- lacc=[]
- luse=[]
- lpas=[]
- acc=user=pasw=" "
- c=1
- while ((len(acc) and len(user) and len(pasw)) and c<21):
- acc=user=pasw=" "
- if not lval[1]==0:
- while len(acc)>lval[4] or acc==" ":
- print "Account #%i\t:" % (c),
- acc=raw_input("")
- if not lval[2]==0:
- while len(acc) and (len(user)>lval[5] or user==" "):
- print "Username #%i\t:" % (c),
- user=raw_input("")
- while len(acc) and len(user) and (len(pasw)>lval[6] or pasw==" "):
- print "Password #%i\t:" % (c),
- pasw=raw_input("")
- lacc.append(acc)
- luse.append(user)
- lpas.append(pasw)
- c+=1
- lacc.pop()
- luse.pop()
- lpas.pop()
- nlval=[lval[0],lval[1],lval[2],lval[3],lacc,luse,lpas]
- return nlval
- # _________ codifica i dati acquisiti _________
- # -> cyp <-
- def encod(lval):
- txt=""
- while lval[6]:
- c=1
- ltoc=[lval[4][0],lval[5][0],lval[6][0]]
- for toc in ltoc:
- if not lval[c]==0:
- ncr=lval[c]
- else:
- ncr=lval[0]
- txt=txt+cyp(toc,ncr,lval[0])
- c+=1
- del lval[4][0],lval[5][0],lval[6][0]
- txt=txt[0:-1]
- return txt
- # _________ cifra linea singola _________
- # <- encod
- def cyp(wrd,ncr,lin):
- tlin=""
- for c in wrd:
- tblk=c
- for t in range(1,ncr):
- random.seed()
- tblk=tblk+string.printable[random.randint(0,94)]
- tlin=tlin+tblk
- ll=len(tlin)
- ll=lin-ll
- for t in range(0,ll):
- tlin=tlin+string.printable[random.randint(0,94)]
- tlin=tlin+"\n"
- return tlin
- # _________ scrive su file _________
- def onfile(txt):
- if os.path.isfile(FILE):
- print "pacy> Il file esiste nel percorso corrente...\n\tSovrascrivo ([y] per confermare)?",
- ok=raw_input("")
- else:
- ok="y"
- if ok=="y":
- ofil=open(FILE,"w")
- w=ofil.write(txt)
- ofil.close
- print "pacy> Scrittura di %i bytes effettuata." % (len(txt))
- else:
- print "pacy> Procedura interrotta."
- # _________ altra codifica? _________
- def ende():
- print
- print "\tEseguo altra codifica ([y] per confermare)?",
- s=raw_input("")
- print
- if s=="y":
- ok=1
- else:
- ok=0
- return ok
- # ============================================================================ #
- # { Sezione Dizionario OPZIONI }
- #
- # Formato:
- # "-<opz.>" : <nome_funzione>,
- mode = {
- "-c" : none,
- "-p" : pers,
- "-h" : olhelp,
- "-d" : decode,
- }
- # ============================================================================ #
- # { MAIN }
- def main(argv,goon):
- print TITLE
- while goon:
- lval=ckarg(argv)
- print TCOD
- lval=calc(lval)
- print "pacy> Inserire i dati ([INVIO] per terminare)..."
- lval=acdata(lval)
- if lval[6]:
- print
- print "pacy> Procedo con la codifica..."
- ctxt=encod(lval)
- print "pacy> Testo generato:"
- print ctxt
- print
- print "\tScrivo su file: %s ([y] per confermare)?" % (FILE),
- s=raw_input("")
- if s=="y":
- onfile(ctxt)
- else:
- print "pacy> Procedura interrotta."
- goon=ende()
- main(sys.argv[1:],1)
Advertisement
Add Comment
Please, Sign In to add comment