2016-08-11 42 views
0

我正在使用pbkdf2算法来散列密码。 为evey密码生成随机盐,为了使计算持续约1秒,迭代次数设置为 。取消密码与pbkdf2散列

我还节省了盐和散列在sambe缓冲:

----------------------- 
    | SaltLen |  4  | 
    ----------------------- 
    | Salt | saltBytes | 
    ----------------------- 
    | HashLen |  4  | 
    ----------------------- 
    | Salt | hashBytes | 
    - --------------------- 

我的问题是,这个哈希密码未链接到一个用户(用户可以拥有多个密码),我需要有可能只使用密码本身来取消密码。 我看到的唯一方法是散列密码,以取消数据库中的每一个盐,直到找到相同的散列,这将永远(每盐1秒)。

有没有更好的方法来做到这一点?

+0

_“取消密码”_是什么意思? – 1615903

+0

在这种情况下,密码是许可证,我想将其标记为已取消 – mba7

+0

您需要某种标识符才能首先查找该行。例如一个从1,2,3开始的64位整数。如果需要,您可以将它附加到密码的开头,但它将以非哈希形式。 – SilverlightFox

回答

0

处理像密码这样的许可证没有任何意义。

PBKDF2 &迭代只对客户端的检查有意义。在服务器端,他们只允许在服务器上执行DOS攻击。无论如何,在服务器上,您可以简单地为每个请求添加1秒的延迟。

您不必散列它们,因为只有数据库中的许可证被认为是有效的。侵入你的服务器并窃取它们没有任何意义。

要检查正确的许可证条目,您只需将许可证的数据库条目ID预先添加到许可证本身,并且您确切知道要检查的条目。

+0

但我能做什么,如果我想生成许可证,将被发送到客户谁有3个月来激活它们。如果有人侵入我的网站,他可以获得他可以使用的有效许可证,而不是真正的客户端。 – mba7

+0

您在问题中提出的数据库只有在软件直接与服务器联系以验证许可证时才有意义。它的设计是不同的你的问题给了一个错误的印象。如果您需要脱机验证许可证,请使用非对称加密技术并签署许可证,许可证名称和失效日期。 – Robert