Skip to content

Instantly share code, notes, and snippets.

@lopes
Created July 4, 2016 12:28
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • 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.
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