-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdef.py
97 lines (78 loc) · 3.29 KB
/
def.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
import glob
import os, random, struct
from Crypto.Cipher import AES
def encrypt_file(key, in_filename, out_filename=None, chunksize=64 * 1024):
""" Encrypts a file using AES (CBC mode) with the
given key.
key:
The encryption key - a string that must be
either 16, 24 or 32 bytes long. Longer keys
are more secure.
in_filename:
Name of the input file
out_filename:
If None, '<in_filename>.enc' will be used.
chunksize:
Sets the size of the chunk which the function
uses to read and encrypt the file. Larger chunk
sizes can be faster for some files and machines.
chunksize must be divisible by 16.
"""
if not out_filename:
out_filename = in_filename + '.enc'
iv = os.urandom(16)
encryptor = AES.new(key, AES.MODE_CBC, iv)
filesize = os.path.getsize(in_filename)
with open(in_filename, 'rb') as infile:
with open(out_filename, 'wb') as outfile:
outfile.write(struct.pack('<Q', filesize))
outfile.write(iv)
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += b' ' * (16 - len(chunk) % 16)
outfile.write(encryptor.encrypt(chunk))
def decrypt_file(key, in_filename, out_filename=None, chunksize=24 * 1024):
""" Decrypts a file using AES (CBC mode) with the
given key. Parameters are similar to encrypt_file,
with one difference: out_filename, if not supplied
will be in_filename without its last extension
(i.e. if in_filename is 'aaa.zip.enc' then
out_filename will be 'aaa.zip')
"""
if not out_filename:
out_filename = os.path.splitext(in_filename)[0]
with open(in_filename, 'rb') as infile:
origsize = struct.unpack('<Q', infile.read(struct.calcsize('Q')))[0]
iv = infile.read(16)
decryptor = AES.new(key, AES.MODE_CBC, iv)
with open(out_filename, 'wb') as outfile:
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
outfile.write(decryptor.decrypt(chunk))
outfile.truncate(origsize)
# key = b'Hj0CfHGrHDt6NIZ3'
se = input("1개에 파일만 복호화할려면 1을 폴더에 있는 파일 전채를 복호화할꺼면 2번을 눌러주세요:")
if se == "1":
startPath = input("그파일에 경로를 풀로 넣어주세여 예:C:/Users/test.txt:")
if se == "2":
startPath = input("그폴더를 풀로 넣어주세요 예:C:/Users/:") + "**"
# startPath = 'C:/Users/junse/PycharmProjects/ransomware/file/**'
key2 = input("암호화할때 넣었던 키를 넣어주세요:")
print("복호화 경로는" + startPath)
print("보안키는" + key2)
key = key2.encode()
# Decrypts the files
for filename in glob.iglob(startPath, recursive=True):
if (os.path.isfile(filename)):
fname, ext = os.path.splitext(filename)
if (ext == '.enc'):
print('Decrypting> ' + filename)
decrypt_file(key, filename)
os.remove(filename)
print("복호화 완료! 이용해주셔서 감사합니다!")
os.system("pause")