我希望为我的应用程序创建一个SUAS行的身份验证系统,除了使用SHA256代替我想要use bcrypt或scrypt的哈希密码。不幸的是python的py-bcrypt和scrypt使用了本地c,GAE不支持。
有什么方法吗?
答案 0 :(得分:24)
Scrypt和BCrypt都是处理器密集型(按设计)。因此,我非常怀疑任何pure-python实现都足够安全 - 也就是说,能够在合理的时间内使用足够数量的舍入进行哈希。
我可以亲自证明这一点,我已经尝试过写一个纯粹的python BCrypt,并且方式太慢而无法使用。另一个答案中提到的纯python bcrypt实现的文档注意到这个确切的缺陷 - 要小心使用它来实际安全性,它的轮次必须设置得太低。唯一一次这样的实现足够快的是pypy,这不是你所面临的情况。
您想要使用的是基于可用的哈希原语(如SHA-2)的内容。这样,即使在GAE下,重的计算位仍然可以用C写入。我推荐一些基于PBKDF2或SHA-512-Crypt的东西(注意:这是不是只是一个简单的sha512哈希)。算法的安全性同样好,但纯python实现会更有效率,因为它们可以利用hashlib
来完成繁重的工作。
在这种情况下,Passlib库可能很有用,它包含纯python中PBKDF2和SHA-512-Crypt的实现。 (免责声明:我是该图书馆的作者)。另一个支持PBKDF2的Python库是Cryptacular。
答案 1 :(得分:7)
这个guy移植到纯python的py-bcrypt所以你可以在GAE上使用它: https://github.com/erlichmen/py-bcrypt