Database 搜索数据库所需的时间

Database 搜索数据库所需的时间,database,authentication,time,hash,salt,Database,Authentication,Time,Hash,Salt,我对web开发和数据库不熟悉,正在尝试以合理的安全性和速度实现密码身份验证。我读过关于散列密码并为每个用户添加一个唯一的salt,以阻止人们生成彩虹表的内容 我的问题涉及为了验证用户而必须搜索的时间。因为我不知道在任何给定的时间谁在尝试连接,所以在我看来,我需要从salt列中检索每个字段,然后对提交的密码+每个唯一的salt进行散列,最后将每个输出与表中的散列字符串进行比较 所以我必须为每个哈希组合(密码+盐)提交一个单独的查询?这看起来会非常慢。我是否错过了一个可以加快进程的技巧?或者仅仅是为

我对web开发和数据库不熟悉,正在尝试以合理的安全性和速度实现密码身份验证。我读过关于散列密码并为每个用户添加一个唯一的salt,以阻止人们生成彩虹表的内容

我的问题涉及为了验证用户而必须搜索的时间。因为我不知道在任何给定的时间谁在尝试连接,所以在我看来,我需要从salt列中检索每个字段,然后对提交的密码+每个唯一的salt进行散列,最后将每个输出与表中的散列字符串进行比较


所以我必须为每个哈希组合(密码+盐)提交一个单独的查询?这看起来会非常慢。我是否错过了一个可以加快进程的技巧?或者仅仅是为了更好的安全性而吮吸并牺牲速度的问题?还是我弄错了?以当今计算机的速度,这根本不是问题?

您不能仅根据密码对用户进行身份验证。密码是验证用户是否是他们所说的人,因此您需要某种类型的用户标识符-名称或其他。然后,表看起来像
用户(…,名称,密码,…)
,您可以
在name=“foo”
中选择密码,然后从那里继续验证。方便的形式是将生成派生密钥所需的所有参数保留在密码字段内,例如:

algo$salt$password hash

对于散列本身,您不希望它是快速的——请参阅诸如PBKDF2、bcrypt或scrypt之类的键派生函数。一般来说,调整参数以使导出一个关键点大约需要一秒钟,这是一种使暴力强制不可行的好方法。

哇,我是个白痴。我不敢相信,我没有想到搜索name列来查找匹配的字符串,而不是散列该用户的密码+salt来进行比较。在我的辩护中,现在是凌晨3:30,我现在笑了。谢谢。