__init__.py
1.03 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
import base64
import hashlib
from Crypto.Cipher import AES
BLOCK_SIZE = 16
def pad(s):
p = len(s)
sisa = p % BLOCK_SIZE
sisa = BLOCK_SIZE - sisa
tambahan = sisa * chr(sisa)
return s + tambahan
def unpad(s):
p = len(s)
i = p - 1
raw = s[i:]
i = ord(raw)
return s[:-i]
class Crypt:
def __init__(self, key):
key = key.encode('utf-8')
key = hashlib.sha256(key)
self.key = key.digest()
def encrypt(self, raw, iv):
iv = iv.encode('utf-8')
raw = pad(raw)
raw = raw.encode('utf-8')
cipher = AES.new(self.key, AES.MODE_CBC, iv)
raw_crypted = cipher.encrypt(raw)
raw_salted = iv + raw_crypted
return base64.b64encode(raw_salted)
def decrypt(self, raw_b64):
raw_salted = base64.b64decode(raw_b64)
iv = raw_salted[:16]
raw_crypted = raw_salted[16:]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
raw = cipher.decrypt(raw_crypted)
raw = unpad(raw)
return bytes.decode(raw)