Skip to content

Instantly share code, notes, and snippets.

@haris1998-web
Created January 26, 2023 06:46
Show Gist options
  • Select an option

  • Save haris1998-web/018698ee722b96bf28bbe29b2e982336 to your computer and use it in GitHub Desktop.

Select an option

Save haris1998-web/018698ee722b96bf28bbe29b2e982336 to your computer and use it in GitHub Desktop.

Revisions

  1. haris1998-web created this gist Jan 26, 2023.
    35 changes: 35 additions & 0 deletions AESCipher.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,35 @@
    ## Install these packages
    ## pycryptodome==3.16.0
    ## pycryptodomex==3.16.0

    import base64
    import hashlib

    from Cryptodome import Random
    from Cryptodome.Cipher import AES


    class AESCipher:
    bs = AES.block_size

    def __init__(self, key):
    self.key = hashlib.sha256(key.encode()).digest()

    def encrypt(self, message):
    message = self._pad(message)
    iv = Random.new().read(AES.block_size)
    cipher = AES.new(self.key, AES.MODE_CBC, iv)
    return base64.b64encode(iv + cipher.encrypt(message.encode('utf-8'))).decode('utf-8')

    def decrypt(self, enc):
    enc = base64.b64decode(enc)
    iv = enc[:AES.block_size]
    cipher = AES.new(self.key, AES.MODE_CBC, iv)
    return self._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8')

    def _pad(self, s):
    return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)

    @staticmethod
    def _unpad(s):
    return s[:-ord(s[len(s) - 1:])]