Php 字符串和salt与密码中的crypt()相同是否安全?

Php 字符串和salt与密码中的crypt()相同是否安全?,php,crypt,Php,Crypt,比如说,有人可以访问散列“PafgokWMoHSZE”。因为这是通过crypt(Password1,Password1)获得的,所以反向工程会比任何其他salt更容易/更难吗?我想说,这不是很安全,因为任何人都可以将密码本身作为salt进行尝试 破解者可以很容易地将密码本身作为一种盐来尝试。甚至不是系统性的,而是仅在测试批次上。如果你的salt加密密码被泄露,他可以在第一次运行时尝试,然后很容易发现密码就是salt,然后对列表的其余部分应用相同的方法 更多解释 如果您的密码是“flower”,任

比如说,有人可以访问散列“PafgokWMoHSZE”。因为这是通过crypt(Password1,Password1)获得的,所以反向工程会比任何其他salt更容易/更难吗?

我想说,这不是很安全,因为任何人都可以将密码本身作为salt进行尝试

破解者可以很容易地将密码本身作为一种盐来尝试。甚至不是系统性的,而是仅在测试批次上。如果你的salt加密密码被泄露,他可以在第一次运行时尝试,然后很容易发现密码就是salt,然后对列表的其余部分应用相同的方法

更多解释

如果您的密码是“flower”,任何字典攻击都会尝试使用“flower”一词。破解者将尝试在md5、SHA1等中查找“flower”的散列。如果它不起作用,那么他将假定散列已被腌制。这让事情变得更加困难。除非他试图把密码本身当作盐来使用


读了这篇文章,你会感到害怕:

它不太安全,不要这样做。问题是salt的前缀是hash,即开头的Pa是Password1的前两个字符。您已将9个字符的密码缩减为7个字符的密码

PHP的crypt()将自动为您生成随机盐。除非你需要一个特定的算法,否则最好不要使用它


编辑:我刚刚想到,这也让用户可以控制哈希算法,这几乎肯定不是你想要的。无效的salt(即密码中的无效字符)也会导致crypt()失败。

但这不要求他已经知道密码是“Password1”?这确实解释了这一点,同时也让我感到害怕。谢谢你。