代码之家  ›  专栏  ›  技术社区  ›  Jan

密码salt是否应存储在数据库中

  •  0
  • Jan  · 技术社区  · 1 年前

    我试图了解密码盐的存储位置。这里的每一个问题都不能帮助我理解将它们存放在哪里。它应该作为每个用户的额外列保存到数据库中,还是应该保存到其他地方?我之所以这么问,是因为如果是用户进行登录,那么我的程序需要知道正确的密码,而salt是一个随机值。

    3 回复  |  直到 1 年前
        1
  •  2
  •   m1k3_0xm0L    1 年前

    密码盐就像存储在超级安全的Vault数据库中的每个用户密码的唯一密钥。它们在散列之前与密码混合,增加了一层额外的保护,就像在有价值的东西上撒上魔法灰一样。这些盐就在数据库中,位于散列密码旁边,因此当用户登录时,系统会获取这个特殊密钥,将其与输入的密码组合,然后检查它们是否与存储的密码匹配。但问题是:这个数据库需要成为一个堡垒,就像超级英雄级别的安全,以确保这些密钥的安全。只要把盐想象成你密码的个性化保镖,让狡猾的黑客很难破解它们。他们不是秘密,他们只是做本职工作的独特保镖。

        2
  •  1
  •   chen.int    1 年前

    保存到数据库中作为每个用户的额外列

        3
  •  -1
  •   Unknown Source    1 年前

    安全地存储密码盐是密码哈希和存储的一个关键方面。一般的最佳做法是将salt值与散列密码一起存储在数据库中。以下是它的典型工作方式:

    1. 生成盐 :当用户创建或更改密码时,为该用户生成一个唯一的随机salt。salt应该是一个加密安全的随机值。

    2. 哈希密码 :将用户密码与salt组合,然后使用强哈希算法(如bcrypt、Argon2或scrypt)对组合进行哈希。将生成的哈希值存储在数据库中。

    3. 储存盐 :将salt值存储在与哈希密码相同的数据库行中,通常存储在附加列中。这将salt与特定的用户帐户相关联。

    4. 验证 :当用户尝试登录时,从数据库中检索与其帐户关联的salt值,并在登录过程中使用该值对提供的密码进行哈希运算。然后将生成的哈希与数据库中存储的哈希进行比较。如果它们匹配,则密码是正确的。

    通过将salt与散列密码一起存储在数据库中,可以确保在登录期间需要验证用户密码时salt始终可用。

    以下是一些额外的提示:

    • 安全存储 :请确保您的数据库受到适当的保护,以防止未经授权的访问。使用加密或其他安全措施来保护存储的数据。

    • 每个用户唯一的盐 :每个用户都应该有一个唯一的盐。这可以防止攻击者使用预先计算的彩虹表或其他技术同时破解多个密码。

    强哈希:使用强大、完善的密码哈希算法,如bcrypt、Argon2或scrypt。这些算法设计缓慢且计算密集,使攻击者难以执行暴力或字典攻击。

    遵循这些最佳实践,您可以增强用户密码的安全性,并保护他们的帐户免受未经授权的访问。