hushh-valet-chat / services /AES_Encryption.py
Omkar008's picture
Create AES_Encryption.py
e69d248 verified
raw
history blame contribute delete
No virus
1.46 kB
from Crypto.Cipher import AES
from Crypto import Random
import hashlib
from base64 import b64encode, b64decode
class AEScipher(object):
def __init__(self, key):
self.block_size = AES.block_size
self.key = hashlib.sha256(key.encode()).digest()
def encrypt(self, plain_text):
plain_text = self.__pad(plain_text)
iv = Random.new().read(self.block_size)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
encrypted_text = cipher.encrypt(plain_text)
return b64encode(iv + encrypted_text).decode("utf-8")
def decrypt(self, encrypted_text):
encrypted_text = b64decode(encrypted_text)
iv = encrypted_text[:self.block_size]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
plain_text = cipher.decrypt(encrypted_text[self.block_size:])
return self.__unpad(plain_text)
def __pad(self, plain_text):
print("inside _pad")
if isinstance(plain_text, str):
print("encoding in base64")
plain_text = plain_text.encode('utf-8')
print("go go")
number_of_bytes_to_pad = self.block_size - len(plain_text) % self.block_size
padding = bytes([number_of_bytes_to_pad] * number_of_bytes_to_pad)
return plain_text + padding
@staticmethod
def __unpad(plain_text):
if isinstance(plain_text, bytes):
return plain_text[:-plain_text[-1]]
return plain_text[:-ord(plain_text[-1])]