【问题标题】:Storing an encrypted password into a database将加密密码存储到数据库中
【发布时间】:2011-04-26 13:38:46
【问题描述】:

我认为这会简单得多,但此时我很困惑,根本没有进展。

基本上,我需要能够在 WPF 应用程序中接受用户的密码,对其进行加密,然后将其存储在数据库中,以便稍后解密。但是我不确定如何实现这一点。

这完全是微不足道的,所以它是否安全并不重要。我所需要的只是让它开始工作,只是我不确定该怎么做。我尝试过使用 DESCryptoServiceProvider(),但没有得到任何结果。

需要明确的是,我该如何将简单密码转换为已加密的密码并将其存储在数据库中(以及我将其存储在哪些字段中)。在这一点上,如果只有一个键并且在源代码中定义了该键,我很高兴。

有什么建议吗?

编辑:为了进一步澄清,我不能“编码”。出于本练习的目的,它必须被加密(即它需要生成一个密钥)。我相信 SHA 是一种编码算法,而不是加密。

【问题讨论】:

  • 你真的是说你以后需要解密密码吗?还是您的意思是您需要存储加密密码,然后将其与另一个加密密码进行比较?您是否需要能够从数据库中读取原始密码?
  • 是的,我的错。我只需要比较两者。
  • 那么,不叫加密,是散列
  • 你似乎很困惑。你说你只需要比较,但你也说你需要加密而不是编码。 SHA 和其他哈希算法正是您比较两个密码所需要的(无需存储密码)。您只需使用散列函数对密码进行编码,并将其与您之前散列并存储的密码的散列进行比较。那里不需要加密/解密密码,你不需要密码本身来比较。
  • 如果你真的,真的,想要加密/解密密码,看看这个dijksterhuis.org/encrypting-decrypting-string,它将告诉你如何加密/解密一些文本(即你想要的密码加密/解密)使用密码(密码是您的“密钥”)。

标签: .net sql-server vb.net encryption passwords


【解决方案1】:

不要尝试为此编写自己的方案,您可能会出错并使其不安全。

最好使用BCrypt 之类的东西来为你做这件事。

而至于如何存储,BCrypt会返回一个哈希密码的字符串编码,很容易存储在数据库中。

明确地说,它是这样工作的。当您第一次存储用户密码时:

  • 从用户那里获取密码
  • 将密码传递给 BCrypt HashPassword 方法
  • 它返回一个作为密码哈希的字符串
  • 您根据用户记录将哈希存储在数据库中

当用户稍后登录时,您:

  • 从用户那里获取密码
  • 从数据库中获取用户的哈希
  • 将用户提供的哈希值和密码传递给 BCrypt CheckPassword 方法
  • BCrypt 根据密码是否匹配返回真或假

【讨论】:

  • 密钥将存储在哪里?
  • 什么键?混合使用的术语与您正在尝试做的事情完全相同。
  • 道歉。我想我把自己弄糊涂了。我又看了看老师实际所说的内容,并花了一些时间来吸收它。我混淆了加密和编码之间的区别,我想这就是导致发帖混乱的原因。
【解决方案2】:

有什么反对使用单向加密的吗? SHA 会这样做 - 您不需要解密它,您只需要检查用户是否再次输入了正确的密码,您可以通过加密他们输入的密码并将生成的哈希与存储在数据库中的哈希进行比较来做到这一点。

记得也要加盐!

【讨论】:

    【解决方案3】:

    您需要存储密码的不可逆加盐哈希码。

    使用SHA512Managed

    【讨论】:

      【解决方案4】:

      如果您使用的是 SQL Server 2005 或更高版本,则可以使用 built-in encryption in the database 来保护数据,而无需编写自己的解密/加密代码。

      那篇文章涵盖了 SQL 2005 - SQL 2008 start here

      加密算法定义数据 不容易的转变 被未经授权的用户撤销。 SQL 服务器允许管理员和 开发人员可供选择 几种算法,包括 DES, 三重 DES、TRIPLE_DES_3KEY、RC2、RC4、 128 位 RC4、DESX、128 位 AES、 192 位 AES 和 256 位 AES。

      【讨论】:

        猜你喜欢
        • 2012-04-07
        • 2021-03-18
        • 2011-04-28
        • 2020-03-20
        • 2016-12-25
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多