Skip to content

Instantly share code, notes, and snippets.

@h0rn3t
Forked from lopes/aes-ecb.py
Last active December 23, 2022 07:19
Show Gist options
  • Save h0rn3t/4216cf787b43060b5afc2d50086918bc to your computer and use it in GitHub Desktop.
Save h0rn3t/4216cf787b43060b5afc2d50086918bc to your computer and use it in GitHub Desktop.
Simple Python example of AES in ECB mode.
from hashlib import md5
from base64 import b64decode
from base64 import b64encode
from Crypto.Cipher import AES
# Padding for the input string --not
# related to encryption itself.
BLOCK_SIZE = 16 # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \
chr(BLOCK_SIZE - len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
class AESCipher:
"""
Usage:
c = AESCipher('password').encrypt('message')
m = AESCipher('password').decrypt(c)
Tested under Python 3 and PyCrypto 2.6.1.
"""
def __init__(self, key):
self.key = md5(key.encode('utf8')).hexdigest()
def encrypt(self, raw):
raw = pad(raw)
cipher = AES.new(self.key.encode("utf8"), AES.MODE_ECB)
return b64encode(cipher.encrypt(raw.encode('utf8')))
def decrypt(self, enc):
enc = b64decode(enc)
cipher = AES.new(self.key.encode("utf8"), AES.MODE_ECB)
return unpad(cipher.decrypt(enc)).decode('utf8')
##
# MAIN
# Just a test.
msg = input('Message...: ')
pwd = input('Password..: ')
print('Ciphertext:', AESCipher(pwd).encrypt(msg))
@dimitris1343
Copy link

ok now the output is:

Message...: hello
Password..: 1234
Ciphertext: b'NGTNQiu5fQEO7rfk9VxsNg=='

What about the decryption ?

i expected something like this for the decryption :
Ciphertext: NGTNQiu5fQEO7rfk9VxsNg==
Password..: 1234
Message...: hello

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment