php - 这个散列有多安全? (PHP)

标签 php security hash

function oneWayEncrypt($string) { 
    $salt = md5($string."yHuJ@8&6%4#%([@d-]"); 
    $salt2 = md5($string."@!#&+-)jU@[yT$@%"); 

    $string = hash('sha512',"$salt$string$salt2"); 

    return $string; 
} 

最佳答案

使用 SHA-512 是获得加密强哈希的好主意,但您选择的盐不会增加太多额外的安全性。特别是,盐只有在其值是随机的且无法提前预测时才是好的。这可以防止攻击者预先计算已知散列表来尝试攻击您的数据库。如果盐是已知的,那么攻击者可以使用硬编码的盐预先计算哈希值表。

在您的情况下,攻击者基本上知道盐,因为它是根据输入字符串确定性计算的。如果我想攻击你的系统,我可以遍历一堆已知的字符串,(确定性地)计算每个字符串的加盐值,然后计算加盐字符串的 SHA-512 散列并将其存储在表中。由此,我可以将哈希值反转为我碰巧预先计算的任何字符串的密码。

如果您想要更好的安全系统,请考虑使用随机生成的盐,然后将其与生成的哈希一起存储。这样,无论我预先计算什么表,该表都有用的可能性很小,因为我不必为所有可能的盐计算表。本质上,你的盐中的每个随机位都会使我必须做的工作量加倍,所以如果你选择一个好的随机盐(比如 128 位),那么我就没有可行的方法可以进行预计算攻击。我必须攻击 SHA-512,一种被认为是加密安全的散列(该名称的意思是“安全散列算法”),以破坏您的系统。

关于php - 这个散列有多安全? (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209629/

相关文章:

c# - WPF C# 应用程序中的哈希密码

python - python中的确定性递归散列

php - 如何在 laravel 中忽略某些有条件的字段的验证

php - 在一个查询中选择和删除同一行

security - cakePHP 安全性

java - 将字节数组转换为可理解的字符串

php - 检查有效电子邮件以及是否存在

php - 我应该如何在我的网站上实现 "like"计数器? (不是 Facebook )

python-3.x - 套接字错误 : [Errno 49] Can't assign requested address

c# - 在 C# .net 中如何使用 RSA 和许可证提供程序类进行许可?