gevent和强哈希密码方法
gevent and strong hashing password method
我正在使用 gevent greenlet,所以我受到与 CPU 计算相关的一切的限制。而且我需要使用强哈希方法来存储密码。
当我不在 gevent 上下文中时,我有使用 bcrypt 的习惯,但我做了这个小测试:
import bcrypt
import time
password = b"toto"
start_hash = time.clock()
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
print 'time hash bcrypt %s' % (time.clock() - start_hash)
start_compare = time.clock()
assert bcrypt.hashpw(password, hashed) == hashed
elapsed = (time.clock() - start_compare)
print 'time check bcrypt %s' % elapsed
这导致:
time hash bcrypt 0.291887
time check bcrypt 0.293343
这需要 太多时间 才能在 greenlet 中使用。
作为比较,使用旧的 md5 散列的相同类型的计算:
time hash md5 4.1e-05
time check hash md5 1.1e-05
我有什么解决办法?
Gevent 与利用并发性的网络和 IO 绑定函数配合得很好,但 bcrypt 没有此功能。
尝试使用 Processlet 和 ObjectPool。 Processlet 专注于 CPU 绑定任务,如散列,而不是 IO 绑定任务。可以找到将 bcrypt 与 Processlet 和 ObjectPool 一起使用的一个很好的例子 here。
我正在使用 gevent greenlet,所以我受到与 CPU 计算相关的一切的限制。而且我需要使用强哈希方法来存储密码。
当我不在 gevent 上下文中时,我有使用 bcrypt 的习惯,但我做了这个小测试:
import bcrypt
import time
password = b"toto"
start_hash = time.clock()
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
print 'time hash bcrypt %s' % (time.clock() - start_hash)
start_compare = time.clock()
assert bcrypt.hashpw(password, hashed) == hashed
elapsed = (time.clock() - start_compare)
print 'time check bcrypt %s' % elapsed
这导致:
time hash bcrypt 0.291887
time check bcrypt 0.293343
这需要 太多时间 才能在 greenlet 中使用。
作为比较,使用旧的 md5 散列的相同类型的计算:
time hash md5 4.1e-05
time check hash md5 1.1e-05
我有什么解决办法?
Gevent 与利用并发性的网络和 IO 绑定函数配合得很好,但 bcrypt 没有此功能。
尝试使用 Processlet 和 ObjectPool。 Processlet 专注于 CPU 绑定任务,如散列,而不是 IO 绑定任务。可以找到将 bcrypt 与 Processlet 和 ObjectPool 一起使用的一个很好的例子 here。