· 6 years ago · Mar 19, 2019, 05:50 PM
1import base64
2from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
3from cryptography.hazmat.primitives import padding
4from cryptography.hazmat.backends import default_backend
5from django.utils.encoding import force_bytes, force_text
6
7SECRET_KEY = "hellomotherfucker"
8value = force_bytes("12345678901234567890")
9
10backend = default_backend()
11key = force_bytes(base64.urlsafe_b64encode(force_bytes(SECRET_KEY))[:32])
12
13
14class Crypto:
15
16 def __init__(self):
17 self.encryptor = Cipher(algorithms.AES(key), modes.ECB(), backend).encryptor()
18 self.decryptor = Cipher(algorithms.AES(key), modes.ECB(), backend).decryptor()
19
20 def encrypt(self):
21 padder = padding.PKCS7(algorithms.AES(key).block_size).padder()
22 padded_data = padder.update(value) + padder.finalize()
23 encrypted_text = self.encryptor.update(padded_data) + self.encryptor.finalize()
24 return encrypted_text
25
26 def decrypt(self, value):
27 padder = padding.PKCS7(algorithms.AES(key).block_size).unpadder()
28 decrypted_data = self.decryptor.update(value)
29 unpadded = padder.update(decrypted_data) + padder.finalize()
30 return unpadded
31
32
33if __name__ == '__main__':
34 print('>>>>>>>>>>>')
35 crypto = Crypto()
36 text = force_text(base64.urlsafe_b64encode(crypto.encrypt()))
37 print(text)
38 print('<<<<<<<<<<<<<')
39 text = force_text(crypto.decrypt(base64.urlsafe_b64decode(text)))
40 print(text)