Php 为什么散列(不使用salt)随机数?

Php 为什么散列(不使用salt)随机数?,php,javascript,asp.net,python,ruby-on-rails,Php,Javascript,Asp.net,Python,Ruby On Rails,下面的代码片段是用php编写的,但我见过其他web编程语言的开发人员散列随机数 if ($loginValid=='yes') { $token = sha256(generateRandomNumber()); $_SESSION["token"] = $token; $_SESSION["userid"] = $id; setcookie("authenticationtoken", $token, ...) } sha256是一个加密哈希函数。因为它不使用

下面的代码片段是用php编写的,但我见过其他web编程语言的开发人员散列随机数

if ($loginValid=='yes') {
    $token = sha256(generateRandomNumber());
    $_SESSION["token"] = $token;
    $_SESSION["userid"] = $id;
    setcookie("authenticationtoken", $token, ...)
}
sha256是一个加密哈希函数。因为它不使用盐,所以无论你给它什么输入,输出都是相同的。试一试:


在什么情况下,不使用salt进行散列是一种良好的做法?

我的猜测是,这只是一种获得已知大小散列的简单方法,与GeneratorDomainNumber返回的大小无关。显然,如果GeneratorDomainNumber的范围很小,那么它也会反映在返回的不同散列的数量上。

我的猜测是,这只是获取已知大小散列的一种简单方法,与GeneratorDomainNumber返回的大小无关。显然,如果GeneraterDomainNumber的范围很小,那么它也会反映在返回的不同散列数中。

假设GeneraterDomainNumber没有随机种子,即它是一个真正加密安全的随机数,则不需要salt。记住,salt的目的是确保如果对哈希函数使用相同的输入,它将返回两个不同的结果

如果令牌仅仅需要是传递给客户端的一个秘密,那么对这个散列进行盐析并没有真正的帮助


作为参考,您可以在密码哈希上使用salt。与其存储用户密码,不如存储其散列,以便在数据库被入侵时,没有人可以窃取用户密码。但是,您不希望使用相同密码的用户获得相同的哈希值,因此在对密码进行哈希运算之前,您会在密码中添加一个salt,以确保即使两个用户拥有相同的密码,他们也应该获得不同的哈希值。

假设GeneratorDomainNumber没有随机种子,也就是说,它是一个真正加密安全的随机数,不需要salt。记住,salt的目的是确保如果对哈希函数使用相同的输入,它将返回两个不同的结果

如果令牌仅仅需要是传递给客户端的一个秘密,那么对这个散列进行盐析并没有真正的帮助


作为参考,您可以在密码哈希上使用salt。与其存储用户密码,不如存储其散列,以便在数据库被入侵时,没有人可以窃取用户密码。但是,您不希望使用相同密码的用户获得相同的哈希值,因此在对密码进行哈希之前,您会在密码中添加一个salt,以确保即使两个用户拥有相同的密码,他们也应该获得不同的哈希值。

OMG!我从没想过有一天Jon Skeet会回答我的问题!应该有Jon Skeet徽章。它是白金,如果Jon Skeet回答了你的问题,你将获得它。我想我现在不值得。。。天啊!我从没想过有一天Jon Skeet会回答我的问题!应该有Jon Skeet徽章。它是白金,如果Jon Skeet回答了你的问题,你将获得它。我想我现在不值得。。。