Cra*_*893 451 database security passwords
我正在开发一个必须具有身份验证(用户名和密码)的项目
它还连接到数据库,所以我想我会在那里存储用户名和密码.但是,将密码仅仅放在数据库中的表中的文本字段似乎不是一个好主意.
我正在使用C#并连接到2008 Express服务器.任何人都可以(尽可能多的例子)建议存储此类数据的最佳方法是什么?
PS我很乐意这样的想法,如果可以提供一个很好的理由,这些信息不会存储在数据库中
Pao*_*ino 391
你是正确的,将密码存储在纯文本字段是一个可怕的想法.但是,就位置而言,对于您将要遇到的大多数情况(我真的想不出任何反例)在数据库中存储密码的表示是正确的事情.通过表示我的意思是你想要使用salt(对每个用户应该是不同的)和一个安全的单向算法来存储密码并存储它,丢弃原始密码.然后,当您要验证密码时,您将对该值进行散列(使用相同的散列算法和salt)并将其与数据库中的散列值进行比较.
所以,虽然你正在思考这个并且这是一个好问题,但这实际上是这些问题的重复(至少):
为了进一步澄清盐渍位,简单地对密码进行哈希处理并存储的危险是,如果侵入者获得了数据库,他们仍然可以使用所谓的彩虹表来"解密"密码(至少显示在彩虹表中的那些).为了解决这个问题,开发人员为密码添加了一个盐,如果做得好,使彩虹攻击变得不可行.请注意,一个常见的误解是简单地为所有密码添加相同的唯一和长字符串; 虽然这并不可怕,但最好为每个密码添加独特的盐.阅读本文了解更多.
joe*_*oej 51
背景 你永远......真的......需要知道用户的密码.您只想验证传入的用户是否知道帐户的密码.
哈希: 通过强哈希函数存储用户密码哈希(单向加密).搜索"c#encrypt passwords"可以提供大量示例.
请参阅在线SHA1哈希创建器以了解哈希函数产生的内容(但不要使用SHA1作为哈希函数,使用更强大的东西,如SHA256).
现在,散列密码意味着您(和数据库小偷)不应该将该散列反转回原始密码.
如何使用它: 但是,你说,我如何使用存储在数据库中的这个混合密码?
当用户登录时,他们会向您提供用户名和密码(在其原始文本中)您只需使用相同的哈希代码来对输入的密码进行哈希处理即可获得存储的版本.
因此,比较两个散列密码(用户名的数据库哈希值和键入的密码和哈希密码).您可以通过比较它们的哈希值来判断"他们输入的内容"是否与"原始用户为其密码输入的内容"相匹配.
额外信用:
问题:如果我有你的数据库,那么我不能像开膛手约翰那样拿一个黑客并开始哈希,直到找到你存储的哈希密码匹配?(因为用户选择简短的字典单词......应该很容易)
答:是的......是的,他们可以.
所以,你应该"加密"你的密码.请参阅有关salt的维基百科文章
nil*_*amo 30
作为密钥加强的盐渍哈希,使用安全算法,如sha-512.
Mit*_*eat 26
最好的安全做法是根本不存储密码(甚至不加密),而是存储加密密码的盐渍哈希(每个密码使用唯一的盐).
这样(实际上)无法检索明文密码.
zeb*_*box 10
我完全建议阅读足够的彩虹表:您需要了解的有关安全密码方案的内容 [死链接,在Internet存档上复制 ]以及如何安全地存储密码.
包括我自己在内的许多程序员认为他们理解安全性和散列.可悲的是,我们大多数人都没有.
归档时间: |
|
查看次数: |
302300 次 |
最近记录: |