Guest

Untitled

By: a guest on Feb 9th, 2010  |  syntax: Python  |  size: 2.70 KB  |  hits: 37  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. mport sys
  2.  
  3. #usage of this program
  4. # sytanx: vigenere --x file key
  5. # pl.: vigenere --df szoveg.txt awordhere
  6. #--e : cipher given txt with vigenere square
  7. #--d: decipher given txt with vigenere square
  8. #--ef: cipher txt and save it to a file
  9. #--df: decipher txt and save it to a file
  10. #the keyword can not include numbers, as well as the given text.
  11. #my suggestion is to write it with letters
  12. help="Use with --e,--d,--ef,--df options! [vigenere.exe --e/--d szoveg.txt awordhere]"
  13. dfname='vig_decoded.txt'
  14. efname='vig_ciphered.txt'
  15. if len(sys.argv)<2:
  16.         print help
  17.         sys.exit()
  18. if sys.argv[1] != "--e" and sys.argv[1] != "--d"  and sys.argv[1] != "--ef"  and sys.argv[1] != "--df":
  19.         print help
  20.         sys.exit()
  21.  
  22. try:
  23.         file = open(sys.argv[2])
  24.         cleanstring = file.read()
  25.         file.close()
  26. except:
  27.         print "I cant read the given file."
  28.         sys.exit()
  29.  
  30. keystr=sys.argv[3]
  31. abc="abcdefghijklmnopqrstuvwxyz"
  32. def eltolas(z):
  33.         #az abc eltolasanak muvelete
  34.         global abc
  35.         ujabc=abc
  36.         while z:
  37.                 ujabc = ujabc[1:] + ujabc[0]
  38.                 z-=1
  39.         return ujabc
  40. def viggen(abc):
  41.         #vigenere kodtabla generalasa az adott abc-bol
  42.         viggent={}
  43.         for x in range(len(abc)):
  44.                 for y in range(len(abc)):
  45.                         viggent[abc[x]+":"+abc[y]] = eltolas(x)[y]
  46.         return viggent
  47. def orderit(string):
  48.         #az adott string kriptografiailag tisztabba tetele
  49.         string=string.lower()
  50.         ujstr=""
  51.         for k in range(len(string)):
  52.                 if string[k] not in abc:
  53.                         pass
  54.                 else:
  55.                         ujstr = ujstr+string[k]
  56.         return ujstr
  57. def titkosit(clean,kulcs,vigtabla):
  58.         clean=orderit(clean)
  59.         hu=0
  60.         while len(kulcs) != len(clean):
  61.                 if hu>len(kulcs): hu=0
  62.                 kulcs = kulcs+kulcs[hu]
  63.                 hu+=1
  64.         codedstr=""
  65.         for f in range(len(clean)):
  66.                 codedstr=codedstr + vigtabla[clean[f]+":"+kulcs[f]]
  67.         return codedstr
  68. def uncipher(coded,kulcs,vigtabla):
  69.         clean=orderit(coded)
  70.         hu=0
  71.         while len(kulcs) != len(clean):
  72.                 if hu>len(kulcs): hu=0
  73.                 kulcs = kulcs+kulcs[hu]
  74.                 hu+=1
  75.         codedstr=""
  76.         aktl=[]
  77.         for f in range(len(clean)):
  78.                 for o in abc:
  79.                         if vigtabla[o + ":" + kulcs[f]] == coded[f]: aktl.append(o)
  80.         for lett in aktl:
  81.                 codedstr=codedstr+lett
  82.         return codedstr
  83. #print "A nyilt szoveg: " + cleanstring
  84. if sys.argv[1] == "--e":
  85.         coded = titkosit(cleanstring,keystr,viggen(abc))
  86.         print coded
  87. elif sys.argv[1] == "--ef":
  88.         coded = titkosit(cleanstring,keystr,viggen(abc))
  89.         file = open(efname, 'wb')
  90.         file.write(coded)
  91.         file.close()
  92.         print "Your file has been succesfully saved as '" + efname + "'."
  93. elif sys.argv[1] == "--d":
  94.         clean= uncipher(cleanstring,keystr,viggen(abc))
  95.         print clean
  96. elif sys.argv[1] == "--df":
  97.         clean= uncipher(cleanstring,keystr,viggen(abc))
  98.         file = open(dfname,'wb')
  99.         file.write(clean)
  100.         file.close()
  101.         print "Your file has been succesfully saved as '" + dfname + "'."