-
Notifications
You must be signed in to change notification settings - Fork 0
/
aes-decrypt.py
76 lines (67 loc) · 2.1 KB
/
aes-decrypt.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
from importlib.resources import contents
from pathlib import Path
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
import argparse
dir_path = Path("Add your path here")
parser = argparse.ArgumentParser()
parser.add_argument('-key', help='key file')
parser.add_argument('-IV', help='IV file')
parser.add_argument('-mode', help='mode')
parser.add_argument('-input','-in', help='input')
parser.add_argument('-out', help='output')
parser.add_argument('-gcm_arg', help='additional file')
args = parser.parse_args()
with open(args.key,'r') as f:
key = f.read()
print(key)
f.close()
key = bytes.fromhex(key)
print(key)
print(len(key))
mode = args.mode
print(mode)
if mode == 'cbc'or mode == 'gcm':
with open(args.IV,'r') as f:
iv = f.read()
f.close()
iv = bytes.fromhex(iv)
print(iv)
print(len(iv))
elif mode == 'ecb':
print('NO IV IN ECB MODE')
with open(args.input,'rb') as f:
inputmsg = f.read()
f.close()
print(inputmsg)
decrypted_msg = b''
if mode == 'ecb':
cipher = Cipher(algorithms.AES(key), modes.ECB())
decryptor = cipher.decryptor()
decrypted_msg = decryptor.update(inputmsg)
print(decrypted_msg)
print('decrpyted with ecb mode')
elif mode == 'cbc':
cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
decryptor = cipher.decryptor()
decrypted_msg = decryptor.update(inputmsg)
print(decrypted_msg)
print('with cbc mode')
elif mode == 'gcm':
with open(args.gcm_arg,'rb') as f:
tag = f.read()
print(key)
f.close()
cipher = Cipher(algorithms.AES(key),modes.GCM(iv, tag))
decryptor = cipher.decryptor()
decrypted_msg = decryptor.update(inputmsg) + decryptor.finalize()
else:
print('invalid mode')
unpadder = padding.PKCS7(128).unpadder()
data = unpadder.update(decrypted_msg)
print(data)
unpadded_msg = data + unpadder.finalize()
print(unpadded_msg)
with open (dir_path.joinpath(args.out),'wb') as f:
f.write(unpadded_msg)
print('Decrypted File Created')