nam3nL0s

Pass Account Cypher

Aug 17th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.83 KB | None | 0 0
  1. #   --------[ pacy - Password & Account CYpher ]--------
  2. #
  3. # Diluisce le lettere di account/user/pass (ognuno su una riga dedicata) con
  4. #+  caratteri stampabili casuali.
  5. # Il passo di ogni singola linea e determinato da un 'pin' di tre cifre
  6.  
  7.  
  8.  
  9. # ============================================================================ #
  10. #                   { sezione IMPORT }
  11. import string
  12. import sys
  13. import random
  14. import os.path
  15.  
  16.  
  17.  
  18. # ============================================================================ #
  19. #                   { Dichiarazione VARIABILI }
  20.  
  21. # _________ VALORI DI DEFAULT _________
  22. LINE=60
  23. PIN="543"
  24. FILE="en-pacy.txt"
  25. # versione
  26. VERSION="1.0"
  27.  
  28. # _________ titoli _________
  29. # programma
  30. TITLE="\n\t================[ P.A.CY. ]================\n"
  31. TITLE=TITLE+"\t     ::( Password & Account Cypher )::\n"
  32. TITLE=TITLE+"\t\t\t\t     -{ ver. %s }-\n" % VERSION
  33. # funzioni
  34. TCOD="\n\t_________________________________________\n"
  35. TCOD=TCOD+"\t_______ Funzione di codifica dati _______\n"
  36. TDEC="\n\t____________________________________________\n"
  37. TDEC=TDEC+"\t_______ Funzione decodifica del file _______\n"
  38. TPER="\n\t________________________________________\n"
  39. TPER=TPER+"\t_______ Cambio valori di default _______"
  40. # _________ Testi dell'Help _________
  41. # opzioni
  42. HOPT="\t-c\tcifratura - comportamento di default\n"
  43. HOPT=HOPT+"\t-d\tdecode - legge e decodifica il file\n"
  44. HOPT=HOPT+"\t-h\thelp - stampa l'aiuto completo\n"
  45. HOPT=HOPT+"\t-p\tpersonalize - permette di modificare i valori di default prima di procedere\n"
  46. # versione estesa
  47. LHELP="\nNAME\n"
  48. LHELP=LHELP+"\tpacy.py - Password & Account CYpher (python module)\n"
  49. LHELP=LHELP+"\nSYNOPSIS\n"
  50. LHELP=LHELP+"\tpython pacy.py [OPTION]\n"
  51. LHELP=LHELP+"\nDESCRIPTION\n"
  52. LHELP=LHELP+"\tLo scopo di 'pacy' e' quello di fornire una \"pseudoencryption\" con semplice file\n"
  53. LHELP=LHELP+"\tdi testo; occulta dati di account diluendo le lettere significative all'interno di\n"
  54. LHELP=LHELP+"\tstringhe di caratteri stampabili generati casualmente.\n"
  55. LHELP=LHELP+"\tL'attuale file di riferimento: %s\n" % FILE
  56. LHELP=LHELP+"\tIl file viene trattato secondo il seguente schema:\n"
  57. LHELP=LHELP+"\t\t+ Ad ogni account vengono dedicate tre righe\n"
  58. LHELP=LHELP+"\t\t\t1. nome dell'account (gmail, facebook, ecc...)\n"
  59. LHELP=LHELP+"\t\t\t2. username\n"
  60. LHELP=LHELP+"\t\t\t3. password\n"
  61. LHELP=LHELP+"\t\t+ il 'pin' di tre cifre determina il passo con il quale leggere le tre\n\t\t  righe rispettivamente\n"
  62. LHELP=LHELP+"\t\t+ passo=0 implica che la riga non conterra' alcun dato significativo\n"
  63. LHELP=LHELP+"\t\t+ passo=1 implica che ogni lettera e' significativa, in altre parole il\n\t\t  dato e' in chiaro\n"
  64. LHELP=LHELP+"\t\t+ entrambi i valori sono vietati per la riga della password\n"
  65. LHELP=LHELP+"\nOPTIONS\n"
  66. LHELP=LHELP+HOPT
  67. LHELP=LHELP+"\nNOTA\n"
  68. LHELP=LHELP+"\tpacy NON garantisce alcuna reale sicurezza crittografica.\n"
  69. LHELP=LHELP+"\tdi fornire un file per il trasporto di account che sia decifrabile ad occhio nudo\n"
  70. LHELP=LHELP+"\tConoscendo il passo, ovvero quante lettere saltare prima di trovare quella\n"
  71. LHELP=LHELP+"\tsignificativa, e' possibile estrarre i dati senza bisogno di visualizzarli in chiaro.\n"
  72. LHELP=LHELP+"\nIMPORTANTE\n"
  73. LHELP=LHELP+"\tPer evitare di indebolire ulteriormente la sicurezza del file sarebbe necessario\n"
  74. LHELP=LHELP+"\tseguire almeno questi consigli basilari:\n"
  75. LHELP=LHELP+"\t\t+ La riga 'account' e' stata inserita per comodita', ma dato che conterrebbe nomi\n"
  76. LHELP=LHELP+"\t\t  conosciuti (google, facebook, twitter, ecc...) sarebbe meglio NON usarla;\n"
  77. LHELP=LHELP+"\t\t+ Non usare passi uguali; es. pin come '333' o '777' sono altamente sconsigliati\n"
  78. LHELP=LHELP+"\t\t+ La funzione di decodifica (parametro '-d') e' stata inserita SOLO per agevolare\n"
  79. LHELP=LHELP+"\t\t  l'uso sul proprio PC casalingo\n"
  80. LHELP=LHELP+"\t\t+ Esercitatevi ad eseguire l'estrazione a occhio nudo; lo scopo di pacy e' proprio\n"
  81. LHELP=LHELP+"\t\t  quello di evitare l'uso di software e pin da digitare.\n"
  82. # help rapido
  83. SHELP="pacy> Opzioni disponibili:\n"
  84. SHELP=SHELP+HOPT
  85.  
  86.  
  87.  
  88. # ============================================================================ #
  89. #                   { Definizione FUNZIONI }
  90.  
  91. def none():
  92.     return []
  93.  
  94. # _________ setta valori di default _________
  95. def setval():
  96.     p1=int(PIN[0])
  97.     p2=int(PIN[1])
  98.     p3=int(PIN[2])
  99.     ln=LINE
  100.     return [ln,p1,p2,p3]
  101.  
  102. # _________ flussa i parametri _________
  103. # ma cosa ho scritto? LOL!
  104. def ckarg(argv):
  105.     lval=[]
  106.     if argv:
  107.         if mode.has_key(argv[0]):
  108.             lval=mode[argv[0]]()
  109.         else:
  110.             print "pacy> Opzione non valida!"
  111.             print SHELP
  112.             sys.exit(1)
  113.     if not lval:
  114.         lval=setval()
  115.     return lval
  116.  
  117. # _________ personalize _________
  118. # imposta i valori immessi dall'utente
  119. def pers():
  120.     p1=p2=p3=ln=-1
  121.     print TPER
  122.     while True:  
  123.         try:  
  124.             while p1<0 or p1>9:
  125.                 p1 = int(raw_input("pin1: "))  
  126.             while p2<0 or p2>9:
  127.                 p2 = int(raw_input("pin2: "))  
  128.             while p3<2 or p3>9:
  129.                 p3 = int(raw_input("pin3: "))
  130.             while ln<10 or ln>80:
  131.                 ln = int(raw_input("line: "))
  132.             break  
  133.         except ValueError:  
  134.             print "pacy> ERROR: inserire numeri interi"  
  135.     return [ln,p1,p2,p3]
  136.  
  137. # _________ help rapido _________
  138. def olhelp():
  139.     print LHELP
  140.     sys.exit(0)
  141.  
  142. # _________ decode _________
  143. # decodifica il file e stampa a video
  144. def decode():
  145.     dtxt=""
  146.     c=1
  147.     print TDEC
  148.     s=raw_input("\tModifico i valori di default ([y] per confermare)?")
  149.     if s=="y":
  150.         lval=pers()
  151.     else:
  152.         lval=setval()
  153.     try:
  154.         ofil=open(FILE,"r")
  155.         clin=ofil.readline()
  156.         while len(clin):
  157.             dlin=decy(clin,lval[c])
  158.             if not dlin:
  159.                 dlin="-- null --"
  160.             if dlin[-1]!="\n":
  161.                 dlin=dlin+"\n"
  162.             dtxt=dtxt+dlin
  163.             if c==3:
  164.                 c=1
  165.             else:
  166.                 c+=1
  167.             clin=ofil.readline()
  168.         ofil.close()
  169.         print "pacy> Output:"
  170.         print "------8<----------------"
  171.         print dtxt,
  172.         print "---------------->8------"
  173.         sys.exit(0)
  174.     except IOError:
  175.         print "pacy> Errore nell'apertura del file. Assicurarsi che esista"
  176.         print "      e che sia presente nel perscorso attuale."
  177.         print "pacy> Esecuzione terminata."
  178.         sys.exit(1)
  179.  
  180. def decy(clin,step):
  181.     t=0
  182.     dlin=""
  183.     if step:
  184.         for c in clin:
  185.             if not t%step:
  186.                 dlin=dlin+c
  187.             t+=1
  188.     return dlin
  189.  
  190. # _________ calcola i caratteri disponibili _________
  191. def calc(lval):
  192.     nc1=nc2=0
  193.     print "pacy> Configurazione:"
  194.     if lval[1]==0:
  195.         print "\tLinea account NON presente"
  196.     else:
  197.         nc1=int(lval[0]/lval[1])
  198.         print "\tLinea account %i caratteri max" % (nc1)
  199.     if lval[2]==0:
  200.         print "\tLinea user NON presente"
  201.     else:
  202.         nc2=int(lval[0]/lval[2])
  203.         print "\tLinea user %i caratteri max" % (nc2)
  204.     nc3=int(lval[0]/lval[3])
  205.     print "\tLinea password %i caratteri max" % (nc3)
  206.     lval.append(nc1)
  207.     lval.append(nc2)
  208.     lval.append(nc3)
  209.     return lval
  210.  
  211. # _________ acquisisce i dati in chiaro _________
  212. def acdata(lval):
  213.     lacc=[]
  214.     luse=[]
  215.     lpas=[]
  216.     acc=user=pasw=" "
  217.     c=1
  218.     while ((len(acc) and len(user) and len(pasw)) and c<21):
  219.         acc=user=pasw=" "
  220.         if not lval[1]==0:
  221.             while len(acc)>lval[4] or acc==" ":
  222.                 print "Account #%i\t:" % (c),
  223.                 acc=raw_input("")
  224.         if not lval[2]==0:
  225.             while len(acc) and (len(user)>lval[5] or user==" "):
  226.                 print "Username #%i\t:" % (c),
  227.                 user=raw_input("")
  228.         while len(acc) and len(user) and (len(pasw)>lval[6] or pasw==" "):
  229.             print "Password #%i\t:" % (c),
  230.             pasw=raw_input("")
  231.         lacc.append(acc)
  232.         luse.append(user)
  233.         lpas.append(pasw)
  234.         c+=1
  235.     lacc.pop()
  236.     luse.pop()
  237.     lpas.pop()
  238.     nlval=[lval[0],lval[1],lval[2],lval[3],lacc,luse,lpas]
  239.     return nlval
  240.    
  241. # _________ codifica i dati acquisiti _________
  242. # -> cyp <-
  243. def encod(lval):
  244.     txt=""
  245.     while lval[6]:
  246.         c=1
  247.         ltoc=[lval[4][0],lval[5][0],lval[6][0]]
  248.         for toc in ltoc:
  249.             if not lval[c]==0:
  250.                 ncr=lval[c]
  251.             else:
  252.                 ncr=lval[0]                                    
  253.             txt=txt+cyp(toc,ncr,lval[0])
  254.             c+=1
  255.         del lval[4][0],lval[5][0],lval[6][0]
  256.     txt=txt[0:-1]
  257.     return txt
  258.  
  259. # _________ cifra linea singola _________
  260. # <- encod
  261. def cyp(wrd,ncr,lin):
  262.     tlin=""
  263.     for c in wrd:
  264.         tblk=c
  265.         for t in range(1,ncr):
  266.             random.seed()
  267.             tblk=tblk+string.printable[random.randint(0,94)]
  268.         tlin=tlin+tblk
  269.     ll=len(tlin)
  270.     ll=lin-ll
  271.     for t in range(0,ll):
  272.         tlin=tlin+string.printable[random.randint(0,94)]
  273.     tlin=tlin+"\n"
  274.     return tlin
  275.  
  276. # _________ scrive su file _________
  277. def onfile(txt):
  278.     if os.path.isfile(FILE):
  279.         print "pacy> Il file esiste nel percorso corrente...\n\tSovrascrivo ([y] per confermare)?",
  280.         ok=raw_input("")
  281.     else:
  282.         ok="y"
  283.     if ok=="y":
  284.         ofil=open(FILE,"w")
  285.         w=ofil.write(txt)
  286.         ofil.close
  287.         print "pacy> Scrittura di %i bytes effettuata." % (len(txt))
  288.     else:
  289.         print "pacy> Procedura interrotta."
  290.  
  291. # _________ altra codifica? _________
  292. def ende():
  293.     print
  294.     print "\tEseguo altra codifica ([y] per confermare)?",
  295.     s=raw_input("")
  296.     print
  297.     if s=="y":
  298.         ok=1
  299.     else:
  300.         ok=0
  301.     return ok
  302.  
  303.  
  304.  
  305. # ============================================================================ #
  306. #                   { Sezione Dizionario OPZIONI }
  307. #
  308. # Formato:
  309. #   "-<opz.>" : <nome_funzione>,
  310.  
  311. mode = {
  312.         "-c" : none,
  313.         "-p" : pers,
  314.         "-h" : olhelp,
  315.         "-d" : decode,
  316. }
  317.  
  318.  
  319.  
  320. # ============================================================================ #
  321. #                   { MAIN }
  322.  
  323. def main(argv,goon):
  324.     print TITLE
  325.     while goon:
  326.         lval=ckarg(argv)
  327.         print TCOD
  328.         lval=calc(lval)
  329.         print "pacy> Inserire i dati ([INVIO] per terminare)..."
  330.         lval=acdata(lval)
  331.         if lval[6]:
  332.             print
  333.             print "pacy> Procedo con la codifica..."
  334.             ctxt=encod(lval)
  335.             print "pacy> Testo generato:"
  336.             print ctxt
  337.             print
  338.             print "\tScrivo su file: %s ([y] per confermare)?" % (FILE),
  339.             s=raw_input("")
  340.             if s=="y":
  341.                 onfile(ctxt)
  342.             else:
  343.                 print "pacy> Procedura interrotta."
  344.         goon=ende()
  345.  
  346. main(sys.argv[1:],1)
Advertisement
Add Comment
Please, Sign In to add comment