下面的代码片段是用php编写的,但是我见过其他web编程语言的开发人员散列随机数。在
if ($loginValid=='yes') {
$token = sha256(generateRandomNumber());
$_SESSION["token"] = $token;
$_SESSION["userid"] = $id;
setcookie("authenticationtoken", $token, ...)
}
sha256是一个加密哈希函数。因为它不使用salt,无论你给它什么输入,输出都是一样的。试试看:
http://www.xorbin.com/tools/sha256-hash-calculator
在什么情况下,散列(不使用salt)是一种被认为是良好做法的随机数?在
我的猜测是,这只是一种简单的方法,可以获得一个已知大小的散列值,与
generateRandomNumber()
返回的大小无关。显然,如果generateRandomNumber()
的范围很小,这也会反映在返回的不同哈希数中。在假设generaterDomainNumber没有随机种子,即它是一个真正加密安全的随机数,则不需要salt。请记住,salt的目的是确保如果对哈希函数使用相同的输入,它将返回两个不同的结果。在
如果token只需要作为传递给客户机的秘密,那么对这个散列进行salt将不会有真正的帮助。在
作为参考,您可以在密码哈希上使用salt。而不是存储用户密码,而是存储它的哈希值,这样如果数据库被穿透,没有人可以窃取用户的密码。但是,您不希望使用相同密码的用户获得相同的哈希值,因此在对密码进行哈希运算之前,您需要在密码中添加一个salt,以确保即使两个用户拥有相同的密码,也应该获得不同的哈希值。在
相关问题 更多 >
编程相关推荐