Skip to content

Instantly share code, notes, and snippets.

@lopes
Last active August 7, 2024 13:42
Show Gist options
  • Save lopes/7ed4a8392fe7b69307155ab379846019 to your computer and use it in GitHub Desktop.
Save lopes/7ed4a8392fe7b69307155ab379846019 to your computer and use it in GitHub Desktop.
Simple Python example of AES in ECB mode. #python #cryptography #aes #ecb #poc
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, AES.MODE_ECB)
return b64encode(cipher.encrypt(raw))
def decrypt(self, enc):
enc = b64decode(enc)
cipher = AES.new(self.key, 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))
@SolarDon
Copy link

The Class and functions are good, but you may want to beef up the test to:

msg = raw_input('Message...: ')
pwd = raw_input('Password..: ')
cipher_text = AESCipher(pwd).encrypt(msg)
print('Ciphertext:', cipher_text)
clear_text= AESCipher(pwd).decrypt(cipher_text)
print('Cleartext:', clear_text)

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