在数据库中存储密码的最佳方法

我正在开发一个必须进行身份验证的项目(用户名/密码)

它也连接到一个数据库,所以我想我会在那里存储用户名和密码,但它似乎不是一个好主意,密码只是一个坐在数据库中的表中的文本字段

我正在使用C#并连接到2008 Express服务器。 任何人都可以建议(尽可能多的例子)什么是存储这种类型的数据的最佳方式?

(我打开这个想法,如果可以提供一个很好的理由,这个信息不会被存储在数据库中)


将密码存储在纯文本字段中是正确的,这是一个可怕的想法。 然而,就位置而言,对于大多数您将遇到的情况(并且我诚实地想不出任何反例)将密码的表示存储在数据库中是正确的。 通过表示,我的意思是你想用盐(这应该是每个用户都不同)和一个安全的单向算法来散列密码,并存储它,扔掉原来的密码。 然后,当你想验证一个密码时,你需要对该值进行散列(使用相同的哈希算法和salt),并将其与数据库中的哈希值进行比较。

所以,虽然这是一件好事,但你正在考虑这个问题,这是一个很好的问题,但这实际上是这些问题的重复(至少):

  • 如何最好地存储用户信息和用户登录名和密码
  • 存储数据库密码的最佳实践
  • 腌制密码:最佳实践?
  • 以纯文本形式将密码存储在php变量或php常量中可以吗?
  • 为了澄清腌制位,进一步说明了密码和存储的危险,即如果侵入者获得了数据库的保留,他们仍然可以使用所谓的彩虹表来“解密”密码(至少是彩虹表中显示的那些)。 为了解决这个问题,开发人员在密码中添加一个盐,如果做得好,会使彩虹攻击变得不可行。 请注意,一个常见的误解是简单地为所有密码添加相同的唯一字符串和长字符串; 虽然这并不可怕,但最好为每个密码添加独特的盐。 阅读更多。


    背景你永远......真的......需要知道用户的密码。 你只是想验证一个传入的用户知道一个帐户的密码。

    哈希值:通过强大的哈希函数存储用户密码哈希(单向加密)。 搜索“c#加密密码”会给出一些例子。

    请参阅联机SHA1哈希创建器,以了解哈希函数生成的内容(但不要将SHA1用作哈希函数,请使用更强大的内容,例如SHA256)。

    现在,哈希密码意味着你(和数据库窃贼)不应该能够将该哈希反转回原始密码。

    如何使用它:但是,你说,我该如何使用这个存储在数据库中的密码?

    当用户登录时,他们会向您发送用户名和密码(以其原始文本)。您只需使用相同的散列码对输入的密码进行散列即可获取存储的版本。

    因此,比较两个散列密码(数据库散列用于用户名和输入和散列密码)。 您可以通过比较其“哈希”来判断“他们输入的内容”是否与“原始用户输入的密码”匹配。

    额外信贷:

    问题:如果我有你的数据库,那么我不能像John the Ripper那样使用一个饼干并开始制作哈希,直到找到与你存储的哈希密码匹配的哈希为止。 (因为用户选择简短的字典单词......它应该很容易)

    答:是的,他们可以。

    所以,你应该“密码”你的密码。 查看维基百科有关盐的文章

    请参阅“如何用数据散列数据”C#示例


    作为一个关键硬化盐腌散列,使用诸如sha-512的安全算法。

    链接地址: http://www.djcxy.com/p/37893.html

    上一篇: Best way to store password in database

    下一篇: Database development mistakes made by application developers