我看到哈希和加密算法之间存在很多混淆,我希望听到一些更专业的建议:
何时使用哈希与加密
什么使哈希或加密算法不同(从理论/数学水平),即什么使哈希不可逆(没有彩虹树的帮助)
以下是一些类似的 SO问题,没有像我想要的那样详细说明:
我已经长时间使用了无盐的md5/sha1,但由于这种方法不太安全(并且随着时间的推移变得越来越不安全)我决定切换到盐渍的sha512.此外,我想通过使用许多迭代(例如100)来减慢散列的生成.
我的问题是我是应该在每次迭代时添加盐还是在开始时只添加一次.以下是两个可能的代码:
每次追加:
// some nice big salt
$salt = hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string . $salt, $raw);
}
return $string;
Run Code Online (Sandbox Code Playgroud)
追加一次:
// add some nice big salt
$string .= hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string, $raw);
}
return $string;
Run Code Online (Sandbox Code Playgroud)
我首先想要使用第二个版本(追加一次)但后来发现每次添加盐的一些脚本.
所以,我想知道每次添加它是否会增加哈希的强度.例如,攻击者是否有可能找到一种聪明的方法来创建一个100XSha512函数,这比简单地执行sha512 100倍?
可能重复:
PHP密码的安全散列和盐
我看到有人编码这样的密码哈希,
md5(uniqid(mt_rand('password', 15), true));
Run Code Online (Sandbox Code Playgroud)
这是一种安全的方式吗?甚至是成功了吗?
我刚开始学习PHP,我想创建一个登录我最后一年大学项目的网站.我已经读过,在这样的很多地方,河豚是最好的散列方法:openssl_digest vs hash vs hash_hmac?SALT和HMAC之间的区别?
我读到的关于crypt方法的每个地方都包含一个字符串,比如$2y$07$usesomesillystringforsalt$我的主要问题是:我如何随机生成这个?我已经读过时间戳和mt_rand()不安全的地方.
我也听说AES是最近的首选技术,但从我看来,在PHP中实现它似乎相当棘手!河豚仍然是保护存储密码的可接受方法吗?