7年前关闭。
我正在一个必须进行身份验证(用户名和密码)的项目中
它还连接到数据库,所以我想我会将用户名和密码存储在那里。但是,在数据库上的表中仅具有文本字段的密码似乎不是一个好主意。
我正在使用C#并连接到2008 Express服务器。谁能(以尽可能多的示例)建议存储这种类型的数据的最佳方法是什么?
附言:如果可以提供充分的理由,我不愿意将此信息不存储在数据库中
最佳答案
您将密码存储在纯文本字段中是一个可怕的主意,这是正确的。但是,就位置而言,在大多数情况下(您真的会想到(我实在想不出任何反例)),在数据库中存储密码表示是正确的做法。通过表示,我的意思是您想使用盐(每个用户应该有所不同)和安全的1向算法对密码进行散列并存储该密码,从而丢弃原始密码。然后,当您要验证密码时,可以对值进行哈希处理(使用相同的哈希算法和盐),并将其与数据库中的哈希值进行比较。
因此,尽管您正在考虑这是一件好事,而且这是一个好问题,但这实际上是这些问题的重复(至少):
How to best store user information and user login and password
Best practices for storing database passwords
Salting Your Password: Best Practices?
Is it ever ok to store password in plain text in a php variable or php constant?
为了进一步说明问题,简单地散列密码并存储的危险在于,如果侵入者拥有您的数据库,他们仍可以使用rainbow tables来“解密”密码(至少显示在彩虹表中的密码)。为了解决这个问题,开发人员在密码中添加了salt,如果正确完成,则彩虹攻击根本就不可行。请注意,常见的误解是在所有密码中简单地添加相同的唯一且长字符串。虽然这并不可怕,但最好为每个密码添加唯一的盐。 Read this for more.
关于database - 在数据库中存储密码的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54531902/