-
Notifications
You must be signed in to change notification settings - Fork 0
/
version_1.py
191 lines (137 loc) · 5.19 KB
/
version_1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#
# Author: Benjamin Nolan
# Date: 28/10/2018, Modified as corrected 17/11/2018
# Description: Caesar Cipher in Python
# Encrypt a string, decrypt a string and brute force decrypt
# ASCII range: ordinals 32 to 127
#
def display_details():
print('Author: Benjamin Nolan')
display_details()
option = ''
# display menu
def get_menu_choice():
print('\n*** Menu ***\n')
print('1. Encrypt string')
print('2. Decrypt string')
print('3. Brute force decryption')
print('4. Quit\n')
# user input menu option
option = int(input('What would you like to do [1,2,3,4]? '))
# validate - only options 1,2,3 and 4 can be entered
while option not in range(1,5):
print('Invalid choice, please enter either 1, 2, 3 or 4.\n')
option = int(input('What would you like to do [1,2,3,4]? '))
if option == 1:
#call enrypt function
encode()
elif option == 2:
#call derypt function
decode()
elif option == 3:
#call brute force decryption function
brute()
elif option == 4:
#abort function
abort()
# offset
def get_offset():
offset_opt = int(input('Please enter offset value (1 to 94): '))
while offset_opt not in range(1,95):
offset_opt = int(input('Please enter offset value (1 to 94): '))
return offset_opt
# encrypt message
def encode():
# get user input for message to encrypt (string)
val = str(input('\nPlease enter string to encrypt: '))
# fetch user input for shift offset from get_offset() function
offset = get_offset()
print('\nEncrypted string:')
# set variables
total_enc = ''
uc_string = ''
# loop through each character found in string to encrypt
for char in val:
# get unicode integer from each character of string
uc_string = ord(char)
# set shift variable to calculate unicode integer plus offset chosen by user
uc_string = (uc_string + offset)
# is ord from string less than 32, yes, add 94
# Modified as corrected 17/11/2018, changed value from 94 to 95
while uc_string < 32:
uc_string += 95
# is ord from string greater than 126, yes, minus 94
# Modified as corrected 17/11/2018, changed value from 94 to 95
while uc_string > 126:
uc_string -= 95
# append all new unicode characters encrypted from original message
total_enc += chr(uc_string)
# display to screen the encrypted message result
print(total_enc)
# recall menu
get_menu_choice()
# decrypt message
def decode():
# get user input for message to decrypt (string)
val = str(input('\nPlease enter string to decrypt: '))
# fetch user input for shift offset from get_offset() function
offset = get_offset()
print('\nDecrypted string:')
# set variables
total_dec = ''
uc_string = ''
# loop through each character found in string to decrypt
for char in val:
# get unicode integer from each character of string
uc_string = ord(char)
# set shift variable to calculate unicode integer minus offset chosen by user
uc_string = (uc_string - offset)
# is ord from string less than 32, yes, add 94
while uc_string < 32:
# Modified as corrected 17/11/2018, changed value from 94 to 95
uc_string += 95
# is ord from string greater than 126, yes, minus 94
while uc_string > 126:
# Modified as corrected 17/11/2018, changed value from 94 to 95
uc_string -= 95
# append all new unicode characters decrypted from original message
total_dec += chr(uc_string)
# display to screen the encrypted message result
print(total_dec)
# recall menu
get_menu_choice()
# Bruce force decryption
def brute():
# get user input for message to decrypt (string)
val = input('\nPlease enter string to decrypt: ')
# set offset value to zero ready for loop
offset = 0
# loop until loop ends at 94th loop
for offset in range(1,95):
# set variables
total_dec = ''
uc_string = ''
# loop through each character found in string to encrypt
for char in val:
# get unicode integer from each character of string
uc_string = ord(char)
# set shift variable to calculate unicode integer minus offset in each loop
uc_string = (uc_string - offset)
while uc_string < 32:
# Modified as corrected 17/11/2018, changed value from 94 to 95
uc_string += 95
while uc_string > 126:
# Modified as corrected 17/11/2018, changed value from 94 to 95
uc_string -= 95
# append all new unicode characters encrypted from original message
total_dec += chr(uc_string)
# display to screen decrypted messages from offset 1 through to 94
print('Offset:',offset,'= Decrypted string:',total_dec)
# recall menu
get_menu_choice()
# quit program
def abort():
print('Goodbye.')
if option not in range(1,5):
get_menu_choice()
#EOF