James Stroud jstroud at
Fri Jun 16 22:56:44 CEST 2006

Laszlo Nagy wrote:
>> Not in this implementation:
>> py> from Crypto.Cipher import AES
>> py> crypt ='abcdefghijklmnop', AES.MODE_CBC)
>> py> c = crypt.encrypt('1')
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in ?
>> ValueError: Input strings must be a multiple of 16 in length
> This is strange. In theory, any ECB mode cipher can be used to create a 
> CBC mode cipher.
> AFAIK, CBC creates one encrypted  block, and uses the one byte from the 
> plain text to xor it
> with the last encrypted byte. Finally it shifts the encrypted block. 
> This way each input byte will
> have a corresponding output byte, and there is no size limit for the 
> plain text.
> Frankly, I could write the CBC mode cipher using the (already existing) 
> ECB cipher. Why we have this limitation?
>  Laszlo

CBC mode is cipher block chaining, so it still works as a block cipher, 
which means that it must be that len(text) % block_size == 0. In other 
words, CBC does not shift by one byte but by block_size bytes. See:


James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

More information about the Python-list mailing list