¿Fácil de usar la biblioteca de cifrado de Python / envoltorio?

Quiero cifrar una cadena de longitud arbitraria con una contraseña en Python. Preferiría no lidiar con el relleno, la generación de claves y las IV, ya que, sinceramente, aún no sé mucho sobre criptografía y me gustaría evitar el desorden. También preferiría usar un cifrado conocido como AES.

Mi biblioteca ideal (llamémosla MagicCrypt) funcionaría así:

from MagicCrypt import AES p = "plaintext" k = "password" crypt = AES(k) c = crypt.encrypt(p) p == crypt.decrypt(c) # True 

He comprobado PyCrypto , m2crypto , pycryptopp , GPGme y keyczar . Ninguno de los dos parece ofrecer este modo realmente fácil de usar. keyczar se acerca más, pero por alguna razón quiere usar un conjunto de teclas guardado en un objeto similar a un archivo o algo similar.

Por lo que sé, tendré que recurrir a llamar a mcrypt con Popen, que ofrece un modo que funciona exactamente como este: parte de la razón por la que supongo que realmente no hay ninguna razón técnica para que esto no exista.

¿Conoce una biblioteca de cifrado segura y fácil de usar para Python? Si no es así, ¿cuál es la forma más fácil (pero segura) de usar cualquiera de las bibliotecas ya mencionadas?

enumeras m2crypto, pero viste m2secret? el ejemplo en http://www.heikkitoivonen.net/m2secret/ parece ser exactamente lo que quieres.

descargo de responsabilidad: no lo he usado y está listado en pypi como calidad alfa http://pypi.python.org/pypi/m2secret/0.1.1

actualización : un tiempo después de responder aquí, escribí simple-crypt, que es un envoltorio simple para pycrypto. hace aes cifrado para Python 2.7 y 3 y es similar a la respuesta de Rob a continuación, pero también incluye PBKDF2 para generar una clave más segura.

Eche un vistazo a http://code.activestate.com/recipes/576980/

EDITAR

Modificado para utilizar una contraseña definida por el usuario de longitud arbitraria. Requiere pyCrypto. Lanzados juntos en minutos sin una prueba a la vista.

Editar 2

Versión actualizada en https://gist.github.com/1192059

Creo que estos dos paquetes son los más adecuados actualmente: wheezy.security y SimpleAES . Ambos tienen un uso tan simple documentado.

Podrías probar pyOCB :

  • Python puro
  • sin dependencias externas
  • Autenticación y cifrado integrados en una interfaz

Uso de muestra – cifrado (y protección de integridad):

 (tag,ciphertext) = ocb.encrypt(plaintext, header) 

Descifrado y autenticación:

 (is_authentic, plaintext2) = ocb.decrypt(header, ciphertext, tag) 

La falta de protección integrada de la integridad del mensaje parece ser la mayor desventaja de muchos otros paquetes mencionados anteriormente. He visto muchas aplicaciones de producción que utilizaban bloques cifrados en URL o cookie como almacenamiento de datos “seguro”, pero se podían manipular fácilmente debido a la falta de protección de la integridad. Y si lo único que tiene es la biblioteca “cifrar con AES”, es poco probable que usted agregue la validación HMAC usted mismo.