【问题标题】:How to create a secure salt? [duplicate]如何创建安全的盐? [复制]
【发布时间】:2014-02-10 02:50:07
【问题描述】:

我有一个小问题,因为我正在创建一个登录和注册系统。我学校的一位开发人员告诉我对安全密码进行加盐。我同意这一点,但他说我需要用时间戳创建盐,但怎么做呢?目前我正在这样做:

$password = hash('sha512', $password . $salt);

盐就像:

$salt = "xHkosbGhsfT77239GhsvH";

这在我的配置中很少见,所以不太好......

有人有什么建议吗?任何想法如何做到这一点,所以如果你们中的任何人与我分享!

谢谢。

【问题讨论】:

  • 我认为这个想法是为每个用户提供独特的盐。所以你可以在你的用户表中添加一个列来存储它,并为每个注册的用户生成一个新的盐。您可以使用时间戳,但请阅读 this - 使用随机盐可能会更好。
  • 仅基于时间戳的盐是一个愚蠢的想法。盐需要是随机的。另外:只需使用native password hashing API5.3.7+ compatibility library
  • @PeeHaa 你能解释一下为什么使用时间戳是个坏主意吗?似乎每个用户几乎都是唯一的。尤其是在“学校登录系统”级别的用户数上。
  • 独特!==随机。您希望盐是随机的。
  • Halfer 建议/s/stupid/non-optimal/ 并向@PeeHaa :-) 发送平静、积极的光线。

标签: php security salt password-hash


【解决方案1】:

最好为每个用户生成一个唯一的盐并将它们保存在您的用户表中。因此,对于密码检查,只需从数据库中获取用户 salt 并使用它。它比使用单一的盐用于孔数据库要安全得多。

【讨论】:

    【解决方案2】:

    您可以使用需要三个参数 (See documentation) 的 hash_hmac() 函数。我是这样使用的:

    hash_hmac('sha512', $password . $salt, SITEKEY);
    

    sha512 是我首选的哈希函数,它生成 128B 长字符串

    $password是用户密码

    $salt 是为每个用户生成的唯一字符串,并存储在数据库中用户的同一行中

    盐生成为:bin2hex(openssl_random_pseudo_bytes($bits)) (See documentation)

    SITEKEY 是我制作的每个网站的唯一字符串

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      相关资源
      最近更新 更多