Encryption 向.htpasswd添加盐?

Encryption 向.htpasswd添加盐?,encryption,hash,salt,.htpasswd,Encryption,Hash,Salt,.htpasswd,是否可以向.hpasswd文件中的密码添加salt?我假设不是这样,因为服务器需要为每个用户提供salt来验证密码,我想不出它是如何获得密码的,但是如果要获得列表,它将非常容易受到攻击。有解决办法吗 非常感谢你的帮助, Ben默认情况下,htpasswd使用标准函数,因此密码已经加密-请注意,在本例中,两个用户的密码相同,但哈希值不同: simon@diablo:~$ htpasswd -b -c htpasswd simon abcd Adding password for user simo

是否可以向.hpasswd文件中的密码添加salt?我假设不是这样,因为服务器需要为每个用户提供salt来验证密码,我想不出它是如何获得密码的,但是如果要获得列表,它将非常容易受到攻击。有解决办法吗

非常感谢你的帮助,
Ben

默认情况下,htpasswd使用标准函数,因此密码已经加密-请注意,在本例中,两个用户的密码相同,但哈希值不同:

simon@diablo:~$ htpasswd -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ htpasswd -b htpasswd simon2 abcd Adding password for user simon2 simon@diablo:~$ cat htpasswd simon:NWvm/LCCxQ64E simon2:2I.LBzsRqULN6 而正确的密码会产生预期的哈希值:

>>> crypt("abcd", "NWvm/LCCxQ64E")
'NWvm/LCCxQ64E'
htpasswd-m
使用一种基于MD5的不同算法,并使用更长的salt:

simon@diablo:~$ htpasswd -m -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ cat htpasswd simon:$apr1$mfvnBVmG$iIHIHOaH9vcImG5G.8eVa/ 这些可以很容易地反转-转换为十六进制摘要:

>>> "".join("%02x" % ord(c)
...      for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'

然后在大多数情况下使用。

htpasswd实用程序:

crypt()和MD5格式通过在随机salt字符串前加前缀来排列表示形式,从而使针对密码的字典攻击更加困难。 这就是(某种程度上)在密码文件中添加盐的目的。虽然服务器的
.htpasswd
文件中必须包含salt,以便服务器能够检查密码,但salt可以是什么样的多种不同的可能性来抵御诸如以下攻击技术


但是,如果您的用户选择弱密码或普通密码,密码破解无论如何都是一个问题,因为攻击者(假定可以访问密码文件)将首先以正常方式猜测密码,非常快地(不受服务器和Internet连接速度的限制)尝试这些密码。我能给出的最好建议是,用户应该始终选择强密码。

SHA加密(可能被指定为htpasswd的一个选项)有什么不好的地方,以至于您希望对哈希进行加密?在发送用户密码时,是否可以选择使用nonce重新刷新身份验证摘要?请参阅我的(更新)答案-由
htpasswd
生成的SHA摘要很容易反转。谢谢!我用SHA-1加密密码。您所说的似乎表明MD5比SHA-1更安全?但它也有它的弱点。我正在用PHP对数据进行编码并将其写入文件,因此我不知道向MD5哈希中添加盐有多容易。另一个有利的方面是,基于MD5的算法将哈希重复1000次(“密钥增强”),这使得暴力破解更加耗时。这个问题的代码声称实现了该算法:这绝对是聪明的!我在那里学到了很多,PHP代码工作得非常好。谢谢强制性注释:1)哈希函数(SHA1、MD5、crypt)不加密。他们的工作是创造性地丢弃信息。2) SHA1(到目前为止)无法撤消。这就是说,人们已经转发(使用SHA1散列)了大量可能的密码,并且可以非常快速地搜索结果(彩虹表)。由于没有salt,很可能彩虹表中存在任何短密码或不安全密码,并且可以从哈希中确定其中一个密码。@SimonJ online哈希数据库链接已失效,这是一个很好的替换: simon@diablo:~$ htpasswd -s -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ htpasswd -s -b htpasswd simon2 abcd Adding password for user simon2 simon@diablo:~$ cat htpasswd simon:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8= simon2:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=
>>> "".join("%02x" % ord(c)
...      for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'