我正在开发一个必须进行身份验证的项目(用户名和密码)
它还连接到数据库,所以我想我会在那里存储用户名和密码。但是,将密码作为位于数据库中的表中的文本字段似乎不是一个好主意。
我正在使用 C# 并连接到 2008 express 服务器。谁能建议(尽可能多的例子)存储此类数据的最佳方式是什么?
PS如果可以提供充分的理由,我愿意不将这些信息存储在数据库中
您是正确的,将密码存储在纯文本字段中是一个 可怕 的想法。但是, 就 location 而言 ,对于您将遇到的大多数情况(老实说,我想不出任何反例)在数据库中存储密码 表示 是正确的做法。通过表示,我的意思是您想使用盐(每个用户应该不同)和安全的单向算法对密码进行哈希处理并存储 它 ,丢弃原始密码。然后,当您想要验证密码时,您对值进行哈希处理(使用相同的哈希算法和盐)并将其与数据库中的哈希值进行比较。
为了进一步澄清盐渍位,简单地散列密码并存储的危险在于,如果入侵者控制了您的数据库,他们仍然可以使用所谓的彩虹表来“解密”密码(至少是出现在彩虹表中的密码)。为了解决这个问题,开发人员在密码中添加了盐,如果正确完成,彩虹攻击根本不可能进行。请注意,一个常见的误解是简单地将相同的唯一且长字符串添加到所有密码中;虽然这并不 可怕 ,但最好为每个密码添加唯一的盐。