2
$clear_text = "hello";
$salt_ = sha1("758hF4H7gJi98U6o");
$salt = substr($salt_, 0, 12);
$hash = substr(hash("sha512", $clear_text), 0, 20).$salt;

如您所见,$hash生成一个 32 个字符的字符串,使其看起来与 md5 相同。所以黑客会试图解密这个md5 哈希,而实际上它不是那样的!这会很狡猾吗?这是个好主意吗?

4

2 回答 2

5

不要试图发明自己的加密,使用标准化的散列算法,如 bcrypt、scrypt 或 PBKDF2。

请参阅:

安全中有一个原则叫做Kirckhoff 原则,其中一条规则是“它不能被要求保密,它必须能够在不方便的情况下落入敌人手中” 建议攻击者可以访问你的机器并且能够转储您的源文件以及您的数据库,他不会花费很长时间来发现您的算法。

现在从那里你自己的滚动算法并没有真正提供任何额外的保护,免受普通 sha512+salt 的影响。无论有没有你的算法,他攻击散列的速度都是一样的。这意味着一旦找到算法,您的方案就没有用了。

于 2013-02-14T22:18:02.173 回答
1
$salt_ = sha1("758hF4H7gJi98U6o");

散列熵不能提供更好的熵。请参阅什么应该用作盐?. 总结:编码一个唯一且不可预测的值。

$hash = substr(hash("sha512", $clear_text), 0, 20).$salt;

您应该使用哈希的多次迭代。请参阅如何安全地散列密码。总结:PBKDF2、BCrypt、SCrypt 提供了这个。

这会不会很狡猾

不,如果您的代码也被阅读,那基本上是无关紧要的。

这是个好主意吗

对于将来不得不维护它的任何人来说,这更有可能是一种滋扰。从表面上看,这可能不是一个主意,因为更改哈希格式可能会使某些人感到困惑,但您可以在阅读The valid role of obscurity时考虑这一点。如果您要更改哈希格式,请花费精力对其进行加密,以便在没有加密密钥的情况下无法对其进行攻击。寻找钥匙的努力可能是相同的,但它会是一个更容易捍卫的决定。

于 2013-02-14T22:30:16.970 回答