如何在App Engine上使用Python中的bcrypt/scrypt?

23 投票
2 回答
6319 浏览
提问于 2025-04-16 23:23

我想为我的应用程序做一个认证系统,类似于SUAS,不过我想用bcrypt或者scrypt来加密密码,而不是用SHA256。可惜的是,Python的py-bcrypt和scrypt都用到了C语言的原生代码,而GAE(Google App Engine)不支持这些。

有没有什么办法可以解决这个问题呢?

2 个回答

8

这个家伙把py-bcrypt移植到了纯Python版本,这样你就可以在GAE上使用它了:https://github.com/erlichmen/py-bcrypt

24

Scrypt和BCrypt都是非常耗费处理器资源的(这是它们设计上的特点)。因此,我非常怀疑任何纯Python的实现能快到足够安全的程度——也就是说,能在合理的时间内进行足够多轮的哈希处理。

我个人可以证明这一点,我尝试过写一个纯Python的BCrypt实现,但它慢得完全没用。另一个答案中提到的纯Python bcrypt实现的文档也提到了这个问题——要小心使用它来做真正的安全性,因为它的轮数必须设置得太低。这样的实现只有在pypy下才会快,这并不是你现在面临的情况。


你应该选择基于现有哈希算法的东西,比如SHA-2。这样,复杂的计算部分仍然可以用C语言编写,即使是在GAE环境下。我推荐基于PBKDF2或SHA-512-Crypt的方案(注意:这可不是普通的sha512哈希)。这些算法的安全性同样很好,但纯Python的实现会更高效,因为它们可以利用hashlib来处理繁重的计算。

Passlib库在这种情况下可能会很有用,它包含了纯Python实现的PBKDF2SHA-512-Crypt。(免责声明:我是这个库的作者)。另一个支持PBKDF2的Python库是Cryptacular

撰写回答