crypt(text,"k7")
我查了一下,显然“k7”是盐,但我不知道这意味着什么,也不知道它会产生什么类型的输出,有人知道吗?
从地穴手册页。
描述
crypt() 是密码加密函数。它基于数据加密标准算法,其变化旨在(除其他外)阻止使用密钥搜索的硬件实现。
key 是用户输入的密码。
salt 是从集合 [a-zA-Z0-9./] 中选择的两个字符的字符串。该字符串用于以 4096 种不同方式之一扰乱算法。
所有其他答案都是正确的,但到目前为止没有人解释为什么盐在那里。
维基百科有一个很好的关于盐和彩虹表的页面,这是我们有盐的主要原因。
没有盐,crypt 基本上只是一个单向散列函数。它将接受一个密码并返回该密码的散列版本。Rainbow
表提供了一种优化的方法来克服这种散列的“单向”性质,并撤销原始密码。
如果您设法获得散列密码(通过一些数据库漏洞,或访问/etc/passwd
or/etc/shadow
文件),理论上您可以知道很多人的密码。
盐为混合物增加了一个额外的“随机”因素。您需要创建一个随机盐并将其存储在某处(密码可以,但分开更好)。现在一组彩虹表是不够的,你突然需要 65,536 组这样的表(在两字节盐的情况下)。盐也可以与密码分开,增加一个额外的障碍。
Salt还有助于防止使用相同密码的用户看起来拥有相同的密码;盐通常是随机选择的,如果盐不同,则散列密码将显着不同。
我还将指出这个解释一些密码基础知识的博客条目,我发现它非常有用。
正如 Randolpho 所指出的,这是一种单向的文本散列过程。
crypt() 的标准用途是存储密码。显然,不建议将密码存储为明文。相反,crypt() 用于生成密码的哈希。当你输入你的密码时, crypt() 会被应用,然后比较两个哈希值。
本质上,crypt() 的功能是将文本翻译成一些新文本,从这些新文本中永远无法恢复原始文本,但对于两个不同的密钥生成相同哈希的概率很低。
crypt 函数接受密码、密钥、字符串和盐字符数组(如下所述),并返回一个以另一个盐开头的可打印 ASCII 字符串。人们相信,给定函数的输出,找到将产生该输出的键的最佳方法是猜测键的值,直到找到键的原始值。
维基百科
底线:单向哈希text