Mai*_*ein 5 python security hash bcrypt
目前我正在尝试构建一个具有很高安全性的登录系统.
所以我想使用bcrypt,我还找到了第三方库 py-bcrypt.
但是作者说这是一个纯粹的python实现.
现在我在某处读到,不推荐在python中使用bcrypt,因为它太慢而导致安全漏洞.bcrypt应该用C实现.
谁能证实这一点?那我该怎么办?
我应该使用:
我正在使用Google App Engine
编辑: http ://packages.python.org/passlib/lib/passlib.hash.bcrypt.html#bcrypt-backends
应该注意的是,考虑到安全性当前所需的轮次数,pure-python实现(#4)太慢而无法使用.因此,默认情况下禁用它,除非设置了环境变量PASSLIB_BUILTIN_BCRYPT ="enabled".
比较两者怎么样?这是用于散列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)