-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaes256sys.py
More file actions
74 lines (55 loc) · 2.15 KB
/
aes256sys.py
File metadata and controls
74 lines (55 loc) · 2.15 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
#this is an algorithm for 256 bit AES with custom padding and initialisation vector function
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from Crypto.Util.Padding import unpad
from Crypto import Random
from Crypto.Hash import SHA256
import base64
import sys
import argparse
import random
import string
# padding used -> PKCS7
def encrypt(key, message, keytype):
message = message.encode()
originalKey = key
characters = string.ascii_letters + string.digits
syskey=''.join(random.choice(characters) for _ in range(10))
key = key+syskey
if keytype == "hex":
key = bytes(bytearray.fromhex(key))
else:
key = key.encode()
key = SHA256.new(key).digest()
init_vector = Random.new().read(AES.block_size)
cipher = AES.new(key,AES.MODE_CBC, init_vector)
data = init_vector + cipher.encrypt(pad(message,AES.block_size)) # maintaining access to IV
print("system key--> ",syskey)
return base64.b64encode(data).decode()
# return data
def decrypt(key, message, keytype, syskey):
message = base64.b64decode(message)
key = key+syskey
if keytype == "hex":
key = bytes(bytearray.fromhex(key))
else:
key = key.encode()
key = SHA256.new(key).digest()
init_vector = message[:AES.block_size] #finally the use of slicing in python
decryptor = AES.new(key, AES.MODE_CBC, init_vector)
data = unpad(decryptor.decrypt(message),AES.block_size)
final = data[AES.block_size:]
return final
if __name__ == "__main__":
parser= argparse.ArgumentParser(description = 'command for encryption/decryption');
parser.add_argument('-e','--encrypt', action='store_true')
parser.add_argument('-d','--decrypt', action='store_true')
parser.add_argument('-k', '--key', type=str)
parser.add_argument('-kt', '--keytype', type=str)
parser.add_argument('-m', '--message', type=str)
parser.add_argument('-sys', '--syskey', type=str)
args=parser.parse_args()
if args.encrypt:
print(encrypt(args.key, args.message, args.keytype))
elif args.decrypt:
print(decrypt(args.key, args.message, args.keytype, args.syskey))