python中的bcrypt

Mai*_*ein 5 python security hash bcrypt

目前我正在尝试构建一个具有很高安全性的登录系统.

所以我想使用bcrypt,我还找到了第三方库 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

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

Cho*_*ick 5

比较两者怎么样?这是用于散列8000个随机位和相应时间的密码的代码:

Hashlib:

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

password = str(random.getrandbits(8000))
print hashlib.sha512(password).hexdigest()
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

bcrypt:

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

password = str(random.getrandbits(8000))
print bcrypt.hashpw(password,bcrypt.gensalt())
Run Code Online (Sandbox Code Playgroud)

时间bcrypt:

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

real    0m0.401s
user    0m0.313s
sys 0m0.013s
Run Code Online (Sandbox Code Playgroud)

时间hashlib:

$ time ./hashlib_test.py 
9e37eb4f164bbb1808833297d0244327e4faac109cd92729228f6e36d75d23044ac13a7a1907515cd6db44474b244678779e3ae4e97d8355c2069332aae52d61

real    0m0.032s
user    0m0.021s
sys 0m0.010s
$ 
Run Code Online (Sandbox Code Playgroud)

  • @Chopstick在密码上使用一次哈希函数是**完全不安全**并且是绝对不可接受的“存储”密码的方式。如果您对 **安全** 简单的基于哈希的密码存储方案感兴趣,您可以使用具有大量(5 或 6 位)轮数的 PBKDF2,尽管 bcrypt 是更好的解决方案。[编辑:这也应该直接发送给OP。我对你的回答反应更多,因为它包含实际的代码。] (2认同)

bob*_*nce 5

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