What (pure) Python library to use for AES 256 encryption?

Question:

I am looking for a (preferably pure) python library to do AES 256 encryption and decryption.

This library should support the CBC cipher mode and use PKCS7 padding according to the answer to an earlier question of mine.

The library should at least work on Mac OS X (10.4) and Windows XP. Ideally just by dropping it into the source directory of my project. I have seen this by Josh Davis, but am not sure about how good it is and if it does the required CBC cipher mode… Scanning the source suggests it doesn’t

Asked By: Daren Thomas

||

Answers:

PyCrypto should be the one for you.

Edit 02/10/2020: unfortunately I cannot delete this post, since it’s the accepted answer. As people pointed out in the comments, this library is not mantained anymore and probably also vulnerable from a security point of view. So please, take a look to the below answers instead.

Answered By: friol

How about ncrypt? It’s not pure python but it is a lot faster as a result. It is basically a nice python wrapper on OpenSSL, so you know there’s quality code behind it.

Answered By: Dan Lenski

PyCrypto is not clearly pythonic so you can get troubles compiling it on some platforms (AIX, HP-UX etc)

Answered By: Denis Barmenkov

Since I found this question when searching for the same thing I would like to add another one to the list:

SlowAES
http://code.google.com/p/slowaes/
It’s a development of Josh Davis’ code, with the help of some other people. It seems to work fine.

Answered By: Blixt

https://github.com/caller9/pythonaes

That is pure python with PKCS7 padding. Supports CBC, CFB, and OFB modes.

The problem is that python is not super fast for this type of thing. The code from serprex’s fork is a little bit inscrutable, but much faster than mine due to using all kinds of tricks to squeeze every last bit of speed out of Python.

Really though, the best libraries for this are compiled and hook into SSE/MMX stuff.

Also Intel is baking in AES instructions since the Core(tm) line of chips.

I wrote my version to get a true pure Python version out there to be able to run on any architecture, cross-platform, and with 3.x as well as 2.7.

Answered By: caller9
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.