-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdecrypt_data.py
63 lines (48 loc) · 2.13 KB
/
decrypt_data.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
# coding: utf-8
import os
import sys
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from time import sleep
def decrypt_data(file_name, key):
"""Decripta os dados do arquivo."""
# Verifica se o arquivo existe e se já está encriptado
if os.path.isfile(file_name):
if file_name.endswith(".enc"):
# Leitura da sequência binária
with open(file_name, "rb") as fo:
# Vetor de inicialização com
# os 16 bytes necessários
iv = fo.read(16)
# Leitura do resto dos dados
data_ciphered = fo.read()
# Verifica erros de valor ao decriptar
try:
# Inicializa um objeto cifra com a chave
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
# Dados restaurados
data_restore = unpad(cipher.decrypt(data_ciphered), AES.block_size)
# Reescrevendo os dados restaurados no arquivo
with open(file_name[:-4], "wb") as fo:
fo.write(data_restore)
# Deletando o arquivo original
os.remove(file_name)
except ValueError:
# Se o erro de valor ocorrer no arquivo que guarda a senha,
# quer dizer que a senha está incorreta, então o script deve fechar.
if file_name == "DATA_GHOST.txt.enc":
print("\n[ ERRO ] Acesso negado.")
sleep(2)
# Matando o processo no Windows
os.system(f"Taskkill /PID {os.getppid()} /F")
sys.exit(0)
else:
# Mostra que a decriptação ocorreu com sucesso
if file_name != "DATA_GHOST.txt.enc":
print(f"[ OK ] {file_name}")
else:
print("\n[ ? ] É necessário que o arquivo esteja encriptado\n"
" para seguir com a decriptação.\n"
f"\n=> Arquivo conflitante: '{file_name}'")
else:
print(f"[ ERRO ] O arquivo '{file_name}' não existe. Tente com outro nome.")