易于使用的Python加密库/包装器?

时间:2011-09-03 23:44:51

标签: python encryption aes

我想在Python中使用密码加密任意长度的字符串。我更喜欢来处理填充,密钥生成和IV,因为老实说我还不太了解密码学,我想避免弄乱。我也更喜欢使用着名的密码作为AES。

我理想的库(我们称之为MagicCrypt)可以这样工作:

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

我已查看PyCryptom2cryptopycryptoppGPGmekeyczar。他们似乎都没有提供这种非常容易使用的模式。 keyczar最接近,但由于某种原因想要使用保存在类文件对象或类似内容中的键集。

据我所知,我将不得不求助于与Popen一起调用mcrypt,它确实提供了一种完全相同的模式 - 部分原因我猜测其中没有技术原因不存在。

您是否知道Python易于使用,安全,加密的库?如果没有,那么使用任何已经提到的库最简单(但最安全)的方法是什么?

4 个答案:

答案 0 :(得分:6)

你列出m2crypto,但是你看到m2secret吗? http://www.heikkitoivonen.net/m2secret/的示例似乎正是您想要的。

免责声明:我没有使用它,它在pypi上列为alpha质量http://pypi.python.org/pypi/m2secret/0.1.1

更新 - 在回答这里后的一段时间我写了simple-crypt这是pycrypto的简单包装。它对python 2.7和3进行了加密,类似于Rob在下面的答案,但也包括PBKDF2 以生成更安全的密钥。

答案 1 :(得分:4)

查看http://code.activestate.com/recipes/576980/

编辑

修改为使用任意长度的用户定义密码。需要pyCrypto。在没有测试的情况下在几分钟内一起投掷。

编辑2

https://gist.github.com/1192059

的更新版本

答案 2 :(得分:1)

我认为这两个套餐目前最适合: wheezy.securitySimpleAES。两者都记录了如此简单的用法。

答案 3 :(得分:0)

您可以尝试pyOCB

  • 纯Python
  • 没有外部依赖
  • 在一个界面中内置身份验证和加密

示例用法 - 加密(和完整性保护):

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

解密和身份验证:

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

缺乏集成的消息完整性保护似乎是上面列出的许多其他软件包的最大缺点。我已经看到许多生产应用程序使用URL或cookie中的加密块作为“安全”数据存储,但由于没有完整性保护,因此可以轻松操作。如果您唯一拥有的是“使用AES加密”库,那么您不可能自己添加HMAC验证。