Instantly share code, notes, and snippets.

Embed
What would you like to do?
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, 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

This comment has been minimized.

SolarDon commented Apr 12, 2018

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