-
Notifications
You must be signed in to change notification settings - Fork 0
/
railfence_tool.py
221 lines (185 loc) · 5.46 KB
/
railfence_tool.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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Exercicio # 6 a) b) c) - Cifra Raifence
"""modulo de expressoes regulares"""
import re
"""
Funcao de cifra
Na cifra railfence, o texto simples é escrito diagonalmente para baixo em "trilhos" (vetores)
sucessivos de uma grelha (matriz) imaginária, movendo-se para cima quando o trilho inferior
é alcançado, para baixo novamente quando o trilho superior é alcançado e assim por diante até
que todo o texto simples seja escrito. O texto cifrado é então lido em coluna.
Por exemplo, para criptografar a mensagem
'WE ARE DISCOVERED. RUN AT ONCE' com 3 "trilhos", escreva o texto como:
1 W . . . E . . . C . . . R . . . U . . . O . . .
2 . E . R . D . S . O . E . E . R . N . T . N . E
3 . . A . . . I . . . V . . . D . . . A . . . C .
"""
def cipher_encryption():
msg = input("Inserir a msg: ")
rails = int(input("Inserir o numero de trilhos (vetores): "))
# remove espacos da msg
msg = msg.replace(" ", "")
# cria uma matriz vazia
rail_no = []
for i in range(rails):
rail_no.append([])
for row in range(rails):
for coluna in range(len(msg)):
rail_no[row].append('.')
# inner for
# for
# debug - testar a matriz
#for row in rail_no:
# for coluna in row:
# print(coluna, end="")
# print("\n")
# # inner for
## for
# ordena as letras da msg em zig-zag na matriz
row = 0
check = 0
for i in range(len(msg)):
if check == 0:
rail_no[row][i] = msg[i]
row += 1
if row == rails:
check = 1
row -= 1
# inner if
elif check == 1:
row -= 1
rail_no[row][i] = msg[i]
if row == 0:
check = 0
row = 1
# inner if
# if-else
# testa a matriz com a mensagem em zig-zag
# for row in rail_no:
# for coluna in row:
# print(coluna, end="")
# print("\n")
# # inner for
# # for
encryp_text = ""
for i in range(rails):
for j in range(len(msg)):
encryp_text += rail_no[i][j]
# for
# remove '.' do texto encriptado
encryp_text = re.sub(r"\.", "", encryp_text)
print("Texto cifrado: {}".format(encryp_text))
"""
Funcao Descifra
"""
def cipher_decryption():
msg = input("Inserir a msg: ")
rails = int(input("Inserir o numero de trilhos (vetores): "))
# remove espacos da msg
msg = msg.replace(" ", "")
# cria matriz vazia
rail_no = []
for i in range(rails):
rail_no.append([])
for row in range(rails):
for coluna in range(len(msg)):
rail_no[row].append('.')
# inner for
# for
# teste
# for row in rail_no:
# for coluna in row:
# print(coluna, end="")
# print("\n")
# # inner for
# # for
# coloca as letras da mensagem uma a uma na matriz em zig-zag
row = 0
check = 0
for i in range(len(msg)):
if check == 0:
rail_no[row][i] = msg[i]
row += 1
if row == rails:
check = 1
row -= 1
# inner if
elif check == 1:
row -= 1
rail_no[row][i] = msg[i]
if row == 0:
check = 0
row = 1
# inner if
# if-else
# testa a matriz com a msg em zig-zag
# for row in rail_no:
# for coluna in row:
# print(coluna, end="")
# print("\n")
# # inner for
# # for
# re ordena a matriz
ordr = 0
for i in range(rails):
for j in range(len(msg)):
temp = rail_no[i][j]
if re.search("\\.", temp):
# skipping '.'
continue
else:
rail_no[i][j] = msg[ordr]
ordr += 1
# if-else
# inner for
# for
# testa a re odernacao da matriz
for i in rail_no:
for coluna in i:
print(coluna, end="")
#inner for
print("\n")
# for
# mete a matriz reordenada num string desencriptada e retira o texto desencriptado
check = 0
row = 0
decryp_text = ""
for i in range(len(msg)):
if check == 0:
decryp_text += rail_no[row][i]
row += 1
if row == rails:
check = 1
row -= 1
# inner if
elif check == 1:
row -= 1
decryp_text += rail_no[row][i]
if row == 0:
check = 0
row = 1
# inner if
# if-else
# for
decryp_text = re.sub(r"\.", "", decryp_text)
print("Mensagem decifrada: {}".format(decryp_text))
def main():
while True:
print("\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+")
print("| *Criptoanalise* |")
print("| *Cifra Rail Fence - Tool* |")
print("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+")
choice = int(input("1. Encriptar\n2. Desencriptar\n0. Sair\nEscolha uma Opção: "))
if choice == 1:
print("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+")
cipher_encryption()
elif choice == 2:
print("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+")
cipher_decryption()
elif choice == 0:
print("Adeus.")
break
else:
print("+ Opção ivalida")
main()