Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. import sys
  2. from math import ceil
  3.  
  4. FREQ_ENG = {'e': 12.7, 't': 9.06, 'a': 8.17, 'o': 7.51, 'i': 6.97, 'n': 6.75, 's': 6.33,
  5. 'h': 6.09, 'r': 5.99, 'd': 4.25, 'l': 4.03, 'c': 2.78, 'u': 2.76, 'm': 2.41,
  6. 'w': 2.36, 'f': 2.23, 'g': 2.02, 'y': 1.97, 'p': 1.93, 'b': 1.49, 'v': 0.98,
  7. 'k': 0.77, 'x': 0.15, 'j': 0.15, 'q': 0.1, 'z': 0.05}
  8.  
  9.  
  10. # ALPHABET = ''' '"#$%&()*+,-./0123456789:;<=>?@[]^_`abcdefghijklmnopqrstuvwxyz{|}~!'''
  11. # ALPHABET = '''abcdefghijklmnopqrstuvwxyz '.,()0123456789'''
  12. ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  13. M = len(ALPHABET)
  14.  
  15.  
  16. def main(args):
  17. file_input, file_output, mode, key = args[:4]
  18. output = str
  19. with open(file_input) as f:
  20. text = f.read()
  21. if mode == 'encrypt':
  22. output = encrypt(text, key)
  23. elif mode == 'decrypt':
  24. output = decrypt(text, key)
  25. print('Input text:\n{}\n'.format(text))
  26. print('Output text:\n{}\n'.format(output))
  27. with open(file_output, 'w') as f:
  28. f.write(output)
  29.  
  30.  
  31. def encrypt(text, key):
  32. key = (key * ceil(len(text) / len(key)))[:len(text)]
  33. result = []
  34. for i, symbol in enumerate(text):
  35. if symbol.upper() in ALPHABET:
  36. if symbol.isupper():
  37. result.append(ALPHABET[(ALPHABET.find(symbol)+ALPHABET.find(key[i])) % M])
  38. else:
  39. result.append(ALPHABET[(ALPHABET.find(symbol.upper()) + ALPHABET.find(key[i])) % M].lower())
  40. else:
  41. result.append(symbol)
  42. # result = [ALPHABET[(ALPHABET.find(text[i].upper())+ALPHABET.find(key[i])) % M] if text[i] in ALPHABET else
  43. # text[i] for i in range(len(text))]
  44. return ''.join(result)
  45.  
  46.  
  47. def encrypt_one(message, key, mode='encrypt'):
  48. translated = []
  49. for symbol in message: # loop through each character in message
  50. num = ALPHABET.find(symbol.upper())
  51. if num != -1: # -1 means symbol.upper() was not found in ALPHABET
  52. if mode == 'encrypt':
  53. num += ALPHABET.find(key[keyIndex]) # add if encrypting
  54. elif mode == 'decrypt':
  55. num -= ALPHABET.find(key[keyIndex]) # subtract if decrypting
  56.  
  57. num %= len(ALPHABET) # handle the potential wrap-around
  58.  
  59. # add the encrypted/decrypted symbol to the end of translated.
  60. if symbol.isupper():
  61. translated.append(ALPHABET[num])
  62. elif symbol.islower():
  63. translated.append(ALPHABET[num].lower())
  64.  
  65. keyIndex += 1 # move to the next letter in the key
  66. if keyIndex == len(key):
  67. keyIndex = 0
  68. else:
  69. # The symbol was not in ALPHABET, so add it to translated as is.
  70. translated.append(symbol)
  71.  
  72.  
  73. def decrypt(text, key):
  74. key = (key * ceil(len(text) / len(key)))[:len(text)]
  75. result = [ALPHABET[(ALPHABET.find(text[i])-ALPHABET.find(key[i])) % M] if text[i] in ALPHABET else
  76. text[i] for i in range(len(text))]
  77. return ''.join(result)
  78.  
  79.  
  80. if __name__ == '__main__':
  81. # try:
  82.  
  83. # main(sys.argv[1:])
  84. main(('1.txt', '2.txt', 'encrypt', 'TEST'))
  85. # except ValueError:
  86. # exit('''
  87. # Формат ввода данных:
  88. # input_file output_file mode key
  89. # ''')
  90. # except KeyboardInterrupt:
  91. # exit('''
  92. # Работа прервана
  93. # ''')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement