Search code examples
aespycrypto

Why must all inputs to AES be multiples of 16?


I'm using the PyCrypto implementation of AES and I'm trying to encrypt some text (24 bytes) using a 24 byte key.

aes_ecb = AES.new('\x00'*24, AES.MODE_ECB)
aes_ecb.encrypt("123456"*4)

I get this surprising error ValueError: Input strings must be a multiple of 16 in length
So why is it that my input must be a multiple of 16? It would make more sense to me that the input string length must be a multiple of my key size, because this would allow nice bitwise operations between the key and blocks of plaintext.


Solution

  • AES is a block cipher. Quote from the Wikipedia page: “a block cipher is a deterministic algorithm operating on fixed-length groups of bits”.

    AES can only work with blocks of 128 bits (that is, 16 chars, as you noticed).

    If your input can have lengths others than a multiple of 128, depending on your application, you may have to be extremely careful how you handle padding.