代码之家  ›  专栏  ›  技术社区  ›  Norbert Pushparaj Yuvaraj

如何为新用户生成安全密码?

  •  2
  • Norbert Pushparaj Yuvaraj  · 技术社区  · 14 年前

    我有一个学生列表,通过管理区域内的表单添加。我正在尝试为每一个添加项设计一个密码生成解决方案,该解决方案在管理面板(如下所示)中既安全又可查看。

    我需要它是可查看的,这样管理员就可以打印出密码并将它们交给家长。但我也希望它们是安全的,以防数据库被破坏。有什么想法吗?

    alt text

    我需要它是可查看的,这样管理员就可以打印出密码并将它们交给家长。但我也希望它们是安全的,以防数据库被破坏。有什么想法吗?

    6 回复  |  直到 14 年前
        1
  •  3
  •   Community CDub    8 年前

    如果您希望密码可以查看,那么它们在发生泄露时就不会真正安全。

    您可能对签出以下堆栈溢出日志感兴趣,以便进一步阅读:

        2
  •  1
  •   BarsMonster    14 年前

    以两种形式存储密码:

    1)用于安全验证的mf5/sha1哈希

    2)加密了主密码的AES。也就是说,为了查看密码,您输入主密码和宾果游戏。在盗窃的情况下,攻击者不会得到那么容易的密码(但可以野蛮)。

        3
  •  1
  •   Paul    14 年前

    这是少数几次我会说软件不应该调整到用户。你说的是重大安全风险。

    我建议制作某种报表生成器来打印创建(生成/盐类和散列并保存)的动态密码以便打印。有了这个,您还可以生成要发送的信件。使过程大部分自动化,一个人只需将其发送到打印机(如果这是必要的话)。

    祝你好运。

        4
  •  1
  •   Alex    14 年前

    你不应该这样做。

    生成一个一次性密码,该密码可用于(也可存储为明文)通过Web设置新密码。

    一旦密码被打印出来,其他人就可以很容易地访问它们,因此,如果您将它们加密或不加密,这一点都不重要。

        5
  •  0
  •   Community CDub    8 年前

    你可以有一个或另一个XO。

    • 如果密码要安全,则不能将其存储在数据库中(存储 some_hash(per_user_salt + password) 并在登录时进行比较(如 @Daniel Vassallo 说)

    • 如果要查看密码,则必须提供某种方法来获取密码-如果有密码,则可能会滥用(例如密码被盗)。如果你决定你绝对地,积极地 需要 为此,请在将密码存储到数据库之前对应用程序中的密码进行加密。这并不能保护您免受所有威胁,但至少如果有人“只”窃取您的数据库,密码是不可读的。

        6
  •  0
  •   Slartibartfast    14 年前

    其他人的想法是正确的,但缺少一个必要的步骤。您应该使用非对称加密,并存储一个公钥加密形式的密码+salt。

    要验证密码,请获取提供的密码,将其与salt组合,使用公钥加密组合,并将其与存储值进行比较。

    要检索密码,请使用私钥(保持安全,即在另一台独立的计算机上)来解密密码+salt并丢弃salt。

    缺点:非对称加密在计算上可能很昂贵,但密码往往很短。

    您可以将它与上面的其他想法结合起来(也就是存储一个盐散列),并且您应该填充密码,这样加密文本的长度就不会泄露密码的长度。