$clear_text = "hello";
$salt_ = sha1("758hF4H7gJi98U6o");
$salt = substr($salt_, 0, 12);
$hash = substr(hash("sha512", $clear_text), 0, 20).$salt;
如您所见,$hash
生成一个32个字符的字符串,使其看起来与md5相同。所以黑客会试图解决这个 md5哈希,实际上它并不是那样的!
这会很狡猾,这会是一个好主意吗?
答案 0 :(得分:6)
不要试图发明自己的加密,使用标准化的哈希算法,如bcrypt,scrypt或PBKDF2。
请参阅:
在安全方面有一个原则叫做Kirckhoff's principle,其中一条规则是“不能要求保密,它必须能够落入敌人手中而不会造成不便”建议攻击者可以访问您的计算机并且能够转储您的源文件以及数据库,因此发现您的算法不会花费很长时间。
现在,你自己的滚动算法并没有真正提供任何额外的保护,不受正常的sha512 +盐的影响。无论是否使用算法,他能够攻击哈希的速度都是相同的。这意味着一旦找到算法,你的方案就没用了。
答案 1 :(得分:1)
$salt_ = sha1("758hF4H7gJi98U6o");
散列熵不能提供更好的熵。见What should be used as a salt?。摘要:编码唯一且不可预测的值。
$hash = substr(hash("sha512", $clear_text), 0, 20).$salt;
您应该使用多次哈希迭代。见How to securely hash passwords。总结:PBKDF2,BCrypt,SCrypt提供了这个。
这会是狡猾吗
不,如果你的代码也被阅读,那基本上就无关紧要了。
并且这是一个好主意
对于任何未来必须维护它的人来说,它更可能是一种麻烦。它可能不是一个坏的想法,因为改变哈希格式可能会使某些人感到困惑,但你可以考虑与阅读The valid role of obscurity一起使用。如果您要更改散列格式,请花费这些精力对其进行加密,以便在没有加密密钥的情况下不会受到攻击。找到密钥的努力可能是相同的,但保护起来要容易得多。