Hash 地穴盐

Hash 地穴盐,hash,des,Hash,Des,例如,在svn环境中,系统如何知道使用DES-crypt哈希将帐户存储在.passwd中,输入的密码是否正确 如果我错了,请纠正我,但如果我使用DES哈希转换某个密码,例如“test”,因为有很多可能性。系统(我认为它只是比较生成的哈希)如何知道输入的密码是正确的?可以说,salt是以明文形式存储的。它的存在是为了防止某些类型的攻击,但是salt只是一些公共(尽管是站点本地)信息,这些信息在散列之前与密码相关联 我们假设您的密码是“test”,您在Cyberdyne工作。管理员可能已经决定sal

例如,在svn环境中,系统如何知道使用DES-crypt哈希将帐户存储在.passwd中,输入的密码是否正确


如果我错了,请纠正我,但如果我使用DES哈希转换某个密码,例如“test”,因为有很多可能性。系统(我认为它只是比较生成的哈希)如何知道输入的密码是正确的?

可以说,salt是以明文形式存储的。它的存在是为了防止某些类型的攻击,但是salt只是一些公共(尽管是站点本地)信息,这些信息在散列之前与密码相关联

我们假设您的密码是“test”,您在Cyberdyne工作。管理员可能已经决定salt是“Cyber”,因此通过DES散列的字符串是“Cybertest”

当您输入密码“test”时,在应用DES之前,它会再次添加到本地salt中,以便salt+散列的结果与存储的密码匹配


如果一个聪明的家伙(或gal)已经建立了一个所有字典单词的DES签名库,他(或她)将不会在其中找到你的哈希密码,因为加密版本不是DES(测试),而是DES(赛博测试)。

这已经得到了很好的回答,但我想用一个实际的例子添加一些额外的信息

在大多数现代系统中,密码实际上存储在阴影文件/etc/shadow(只有root用户才能读取)中,而不是/etc/passwd中。作为一个简单的练习,看看它实际上是如何工作的,请尝试以下操作:作为root用户,查看您的用户记录的卷影文件中的行:

cat /etc/shadow | grep yourusername
您将看到如下内容:

yourusername:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:7:::
在你的用户名之后是1美元。这表示它是一个MD5散列。在这之后还有一美元,然后(在本例中)
TrOIigLp
后跟另一美元。TrOIigLp是盐。之后是散列密码,它是使用salt散列的-在本例中是
PUHL00kS5UY3CMVaiC0/g0

现在,您可以使用openssl使用相同的salt对密码进行散列,如下所示:

 openssl passwd -1 -salt TrOIigLp

在提示时输入用户密码,openssl命令应该使用提供的salt计算MD5散列,并且应该与影子文件中的上述内容完全相同。上面命令中的-1用于MD5散列。

因此,如果我使用DES进行散列测试,例如:pt8nvc2uxftei,那么这个散列的一部分包含salt正确吗?因此,不同的散列是可能的,但所有的散列都可以进行比较?请参阅,以获得关于其工作原理的非常好的解释。@Thomas
crypt()
使用密码参数和salt参数作为提示,以同时提供这两个参数,但幕后发生的事情基本上是散列之前的链接。确定编辑的thx;不过,我还有一个问题。在svn环境中,如何确定这种盐?编辑thx-mti2935;将阅读that@Thomas实际上,这个答案是关于总的想法。通过谷歌搜索,发现DES非常有限,而在DES的例子中,技术细节有点肮脏。我会把它放在这里,但它应该只是一个一般性的解释,并警告说,DES的细节是棘手的。回答很好,谢谢(我知道这是UPVOUTS的目的,但我很少发现自己如此高兴地阅读另一个我认为我已经涵盖的问题的答案)。