6

目前我正在尝试构建一个安全性非常高的登录系统。

所以我想使用 bcrypt 并且我还找到了第 3 方库 py-bcrypt

但是作者说是纯python实现。

现在我在某处读到不建议在 python 中使用 bcrypt,因为它太慢了,这会导致安全漏洞。bcrypt 应该在 C 中实现。

谁能证实这一点?现在我该怎么办?

我应该使用:

  • bcrypt (python)
  • SHA512(来自 hashlib)
  • 有些不同

我正在使用 Google App Engine

编辑: http ://packages.python.org/passlib/lib/passlib.hash.bcrypt.html#bcrypt-backends

应该注意的是,考虑到当前安全所需的轮数,纯 python 实现(#4)太慢而无法使用。因此,默认情况下它是禁用的,除非设置了环境变量 PASSLIB_BUILTIN_BCRYPT="enabled"。

4

2 回答 2

6

比较一下两者如何?这是对 8000 个随机位和相应时间的密码进行哈希处理的代码:

哈希库:

#!/usr/bin/env python
import hashlib
import random

password = str(random.getrandbits(8000))
print hashlib.sha512(password).hexdigest()

Hashlib 包括盐:

#!/usr/bin/env python
import hashlib
import random

password = str(random.getrandbits(8000))
salt = str(random.getrandbits(256))
print hashlib.sha512(password + salt).hexdigest()

加密:

#!/usr/bin/env python
import bcrypt
import random

password = str(random.getrandbits(8000))
print bcrypt.hashpw(password,bcrypt.gensalt())

定时 bcrypt:

$ time ./bcrypt_test.py 
$2a$12$Om3a3zKsCNAM/SLB3hq5w.HYukFwn4CJ73rjXYNUPgqckUx2uLEmG

real    0m0.401s
user    0m0.313s
sys 0m0.013s

计时哈希库:

$ time ./hashlib_test.py 
9e37eb4f164bbb1808833297d0244327e4faac109cd92729228f6e36d75d23044ac13a7a1907515cd6db44474b244678779e3ae4e97d8355c2069332aae52d61

real    0m0.032s
user    0m0.021s
sys 0m0.010s
$ 
于 2012-07-09T11:26:31.083 回答
5

尝试passlib。它具有bcrypt的 C 实现。

于 2012-07-09T12:49:25.703 回答