gevent和强哈希密码方法

时间:2016-06-02 13:29:22

标签: python bcrypt gevent

我正在使用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

我有什么解决方案?

1 个答案:

答案 0 :(得分:1)

Gevent适用于利用并发性的网络和IO绑定函数,但bcrypt没有此功能。

尝试使用Processlet和ObjectPool。 Processlet侧重于CPU绑定任务,如散列,而不是IO绑定任务。可以找到使用带有Processlet和ObjectPool的bcrypt的一个很好的例子{。{3}}。