-
-
Save h0rn3t/4216cf787b43060b5afc2d50086918bc to your computer and use it in GitHub Desktop.
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)) |
I tried to run this but i had this problem:
Message...: hello
Password..: 1234
Traceback (most recent call last):
File "aes-ecb.py", line 43, in
print('Ciphertext:', AESCipher(pwd).encrypt(msg))
File "aes-ecb.py", line 28, in encrypt
cipher = AES.new(self.key, AES.MODE_ECB)
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Cipher/AES.py", line 232, in new
return _create_cipher(sys.modules[name], key, mode, *args, **kwargs)
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Cipher/init.py", line 79, in _create_cipher
return modes[mode](factory, **kwargs)
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Cipher/_mode_ecb.py", line 215, in _create_ecb_cipher
cipher_state = factory._create_base_cipher(kwargs)
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Cipher/AES.py", line 103, in _create_base_cipher
result = start_operation(c_uint8_ptr(key),
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Util/_raw_api.py", line 238, in c_uint8_ptr
raise TypeError("Object type %s cannot be passed to C code" % type(data))
TypeError: Object type <class 'str'> cannot be passed to C code
fixed
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
I tried to run this but i had this problem:
Message...: hello
Password..: 1234
Traceback (most recent call last):
File "aes-ecb.py", line 43, in
print('Ciphertext:', AESCipher(pwd).encrypt(msg))
File "aes-ecb.py", line 28, in encrypt
cipher = AES.new(self.key, AES.MODE_ECB)
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Cipher/AES.py", line 232, in new
return _create_cipher(sys.modules[name], key, mode, *args, **kwargs)
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Cipher/init.py", line 79, in _create_cipher
return modes[mode](factory, **kwargs)
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Cipher/_mode_ecb.py", line 215, in _create_ecb_cipher
cipher_state = factory._create_base_cipher(kwargs)
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Cipher/AES.py", line 103, in _create_base_cipher
result = start_operation(c_uint8_ptr(key),
File "/home/papei1/.local/lib/python3.8/site-packages/Crypto/Util/_raw_api.py", line 238, in c_uint8_ptr
raise TypeError("Object type %s cannot be passed to C code" % type(data))
TypeError: Object type <class 'str'> cannot be passed to C code