function oneWayEncrypt($string) {
$salt = md5($string."yHuJ@8&6%4#%([@d-]");
$salt2 = md5($string."@!#&+-)jU@[yT$@%");
$string = hash('sha512',"$salt$string$salt2");
return $string;
}
Run Code Online (Sandbox Code Playgroud)
tem*_*def 15
使用SHA-512是获得加密强哈希的好主意,但是您选择的盐不会增加额外的安全性.特别是,如果盐的值是随机的并且不能提前预测,则盐只是好的.这可以防止攻击者预先计算用于尝试攻击数据库的已知哈希表.如果盐是已知的,则攻击者可以预先计算哈希值的表,其中盐是硬编码的.
在您的情况下,攻击者基本上知道salt,因为它是根据输入字符串确定性计算的.如果我想攻击你的系统,我可以迭代一堆已知的字符串,(确定地)计算每个字符串的salt,然后计算盐渍字符串的SHA-512哈希并将其存储在表中.从这里,我可以将哈希值反转为我碰巧预先计算的任何字符串的密码.
如果您想要一个更好的安全系统,请考虑使用随机生成的盐,然后将其与生成的哈希一起存储.这样,无论我预先计算哪些表格,表格都很有用,因为我不一定会为所有可能的盐计算表格.从本质上讲,盐中的每个随机位都会使我必须完成的工作量增加一倍,所以如果你选择一个好的随机盐(比如128位),那么我就没有可行的方法可以进行预计算攻击.我必须攻击SHA-512,一个假定为加密安全的哈希(名称的意思是"安全哈希算法")来打破你的系统.