database - 在数据库中存储密码的最佳方式

标签 database security passwords

<分区>

我正在做一个必须有身份验证(用户名和密码)的项目

它还连接到一个数据库,所以我想我应该把用户名和密码存储在那里。但是,将密码作为数据库表中的一个文本字段似乎并不是一个好主意。

我正在使用 C# 并连接到 2008 Express 服务器。谁能建议(尽可能多地举例)存储此类数据的最佳方式是什么?

P.S 如果可以提供充分的理由,我可以接受不将此信息存储在数据库中的想法

最佳答案

您说得对,将密码存储在纯文本字段中是一个可怕的想法。然而,就位置而言,对于您将遇到的大多数情况(老实说,我想不出任何反例)存储表示在数据库中输入密码是正确的做法。通过表示,我的意思是您想要使用盐(每个用户应该不同)和安全的单向算法对密码进行哈希处理并存储那个,丢弃原始密码。然后,当您想要验证密码时,您对该值进行哈希处理(使用相同的哈希算法和盐)并将其与数据库中的哈希值进行比较。

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

为了进一步澄清加盐位,简单地散列密码并存储它的危险在于,如果侵入者获得了您的数据库,他们仍然可以使用所谓的 rainbow tables。能够“解密”密码(至少是那些出现在彩虹表中的密码)。为了解决这个问题,开发人员添加了一个 salt密码,如果处理得当,彩虹攻击根本无法实现。请注意,一个常见的误解是简单地向所有密码添加相同的唯一且长的字符串;虽然这并不可怕,但最好为每个密码添加唯一的盐。 Read this for more.

关于database - 在数据库中存储密码的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49464911/

相关文章:

java - 在java上制作暴力破解工具: How to make computer automatically input username and password on a website

php - 如何保护数据库服务器?

sql-server - SQL Server 使用 Group by 和 union 选择查询

arrays - 如何链接结构?需要优化性能

java - 将 JMX MBean 访问记录到日志文件中

encryption - gnupg:不能保证该 key 属于指定用户

java - MySQL 创建或修改表

php - 如何禁用所有文件上传到服务器?

azure - 有人可以通过无限 HTTP 循环增加 Azure Web App 的成本吗?

php - 使用加密密码安全地将php连接到mysql