As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
                            
                        
                    
                
                                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/

10-16 15:37