-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEncrypto.py
More file actions
252 lines (174 loc) · 7.64 KB
/
Encrypto.py
File metadata and controls
252 lines (174 loc) · 7.64 KB
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
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
import secrets
# Lê o conteúdo de um arquivo de texto
try:
with open('mensagem.txt', 'r', encoding='utf-8') as file:
texto = file.read().upper() # Lê o arquivo e prepara a mensagem
except FileNotFoundError:
print("O arquivo 'mensagem.txt' não foi encontrado.")
# tratamento da mensagem
def Remover_acentos(texto):
try:
# Dicionário com as substituições de caracteres acentuados
acentuados = {
'Ç': 'C', 'À': 'A', 'Â': 'A', 'Ä': 'A', 'Ã': 'A', 'Æ': 'AE',
'É': 'E', 'È': 'E', 'Ê': 'E', 'Ë': 'E', 'Í': 'I', 'Ì': 'I', 'Î': 'I', 'Ï': 'I',
'Ñ': 'N', 'Ó': 'O', 'Ò': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö': 'O', 'Ø': 'O', 'Ú': 'U',
'Ù': 'U', 'Û': 'U', 'Ü': 'U', 'Ý': 'Y', 'Á': 'A','Ÿ': 'Y', 'Œ': 'OE'
}
# Substitui os caracteres acentuados com base no dicionário
for caractere_acentuado, caractere_sem_acentos in acentuados.items():
texto = texto.replace(caractere_acentuado, caractere_sem_acentos)
return texto
except Exception as e:
print(f'Erro: {e}')
mensagem = Remover_acentos(texto)
while True:
try:
espaco = str(input("Deseja manter o espaçamento entre as letras na mensagem? [S/N] ")).upper()
if espaco == "N" :
mensagem = mensagem.replace(' ','')
break
if espaco == "S" :
break
except Exception as e:
print(f'Erro: {e}')
def Cesar():
# Cifra de César
# Simples de implementar.
# Boa para aprendizado, mas não segura para uso real.
# Recomendado para iniciantes.'
try:
resultado = ""
alfabeto= ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
while True:
try:
crip_ou_descript = int(input(' [0]: criptografar [1]:descriptografar mensagem: '))
if crip_ou_descript == 1 or crip_ou_descript == 0:
break
except Exception as e:
print(f'Erro: {e}')
deslocamento = int(input("Defina a quantidade de deslocamentos: "))
for letra in mensagem:
if letra.isdigit() or letra in '.,!?=+-%@$;:&()':
resultado += letra
continue # skipa a iteração se for número
if letra in alfabeto:
posicao_alfabeto = alfabeto.index(letra)
if crip_ou_descript:
# Aplicando o deslocamento de forma circular com o operador de módulo (resto da divisão)
nova_posicao = (posicao_alfabeto - deslocamento) % len(alfabeto)
else:
# Aplicando o deslocamento de forma circular com o operador de módulo (resto da divisão)
nova_posicao = (posicao_alfabeto + deslocamento) % len(alfabeto)
letra = alfabeto[nova_posicao]
resultado += letra
else:
if letra == ' ':
resultado += letra
else:
print(f"invalido: {letra} (não incluido)")
# Salvando o resultado em um arquivo de texto
with open("mensagem_resultado.txt", "w") as file:
file.write(resultado) # Escreve a criptografia no arquivo de texto
print("O resultado foi salvo no arquivo 'mensagem_resultado.txt'.")
except Exception as e:
print(f'Erro: {e}')
def Monoalfabetica():
#Cifra de Substituição (Cifra Monoalfabética)
#Uma variação da Cifra de César, onde as letras são substituídas por outras aleatoriamente (não apenas com um deslocamento fixo).
#Embora mais difícil de decifrar do que a Cifra de César, ainda é vulnerável a ataques como análise de frequência.
alfabeto= ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
letra_usada = []
alfabeto_copia = alfabeto.copy()
resultado = ''
while True:
try:
crip_ou_descript = int(input(' [0]: criptografar [1]: descriptografar mensagem: '))
if crip_ou_descript == 1 or crip_ou_descript == 0:
break
except Exception as e:
print(f'Erro: {e}')
if not crip_ou_descript: # cript_descript = False (criptografar)
while True:
try:
pergunta = int(input("[0]: alfabeto de substituição aleatória [1]: alfabeto de substituição manual: "))
if pergunta == 1:
# alfabeto de substiuiçao manual
for i, letra in enumerate(alfabeto):
nova_letra = str(input(f'Escreva o substituto da letra "{letra}" : ')).strip().upper()
while nova_letra == '' or len(nova_letra) != 1 or nova_letra in letra_usada:
print('><'*60)
print("Inválido! a nova letra deve ser apenas UM caractere e este não pode se repetir! ")
print('><'*60)
nova_letra = str(input(f'Escreva o substituto da letra "{letra}" : ')).strip().upper()
letra_usada.append(nova_letra)
alfabeto[i] = nova_letra
break
# alfabeto de substiuição aleatória
if pergunta == 0:
# a letra nova não pode se repetir de novo no alfabeto
for i,letra in enumerate(alfabeto):
nova_letra = secrets.choice(alfabeto_copia)
while nova_letra == letra or nova_letra in letra_usada:
nova_letra = secrets.choice(alfabeto_copia)
letra_usada.append(nova_letra)
alfabeto[i] = nova_letra
break
except Exception as e:
print(f'Erro: {e}')
print('=' *74)
print(f'este é o seu novo alfabeto de A-Z, guarde-o para conseguir desciptografá-lo depois :)')
print(f'Antes: {alfabeto_copia}')
print(f'depois: {alfabeto}')
print("string:", ''.join(alfabeto))
print('=' *74)
# criptografia Monoalfabética
try:
for letra in mensagem:
if letra.isdigit() or letra in '.,!?=+-%@$;:&()':
resultado += letra
continue # skipa a iteração se for número ou símbolo
if letra in alfabeto_copia:
posicao_alfabeto = alfabeto_copia.index(letra)
letra = alfabeto[posicao_alfabeto]
resultado += letra
else:
if letra == ' ':
resultado += letra
except Exception as e:
print(f'Erro: {e}')
else: # cript_descript = True (descriptografar)
# Descriptografia
try:
while True:
print('=' * 60)
alfabeto = str(input('Informe o alfabeto que foi utilizado para criptografar a mensagem: ')).replace(' ','').upper()
if len(alfabeto) == 26:
alfabeto = list(alfabeto)
break
print('><' * 60)
print(f'Erro! o alfabeto brasileiro possui 26 letras! Você forneceu {len(alfabeto)} letras!')
print('><' * 60)
for letra in mensagem:
if letra.isdigit() or letra in '.,!?=+-%@$;:&()':
resultado += letra
continue # skipa a iteração se for número ou símbolo
if letra in alfabeto:
posicao_alfabeto = alfabeto.index(letra)
letra = alfabeto_copia[posicao_alfabeto]
resultado += letra
else:
if letra == ' ':
resultado += letra
except Exception as e:
print(f'Erro: {e}')
# Salvando o resultado em um arquivo de texto
with open("mensagem_resultado.txt", "w") as file:
file.write(resultado) # Escreve a criptografia no arquivo de texto
print("O resultado foi salvo no arquivo 'mensagem_resultado.txt'.")
Monoalfabetica()
# gerar letra aleatoria, conferir se a letra gerada é diferente da letra original, adicionar cada letra aleaotria para a lista novo alfabeto
# substituir cada letra da mensagem pelo novo alfabeto
#def AES():
#É um algoritmo de criptografia simétrica, o que significa que a mesma chave é usada tanto para criptografar quanto para descriptografar os dados.
#A segurança do AES depende da chave secreta compartilhada entre as partes envolvidas.