将加密密码存储到数据库中

时间:2010-10-17 11:52:56

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

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

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

这完全是微不足道的,所以无论安全与否都无关紧要。我所需要的只是让它工作而我只是不确定如何去做。我已经尝试过使用DESCryptoServiceProvider(),但还没到任何地方。

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

有什么建议吗?

编辑:为了进一步澄清,我不能'编码'。为了本练习的目的,必须对其进行加密(即需要生成密钥)。我相信SHA是一种编码算法,而非加密。

4 个答案:

答案 0 :(得分:4)

不要试图为此编写自己的方案,你可能会出错并让它不安全。

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

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

要清楚,它的工作原理如下。当您第一次存储用户密码时:

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

当用户稍后登录时:

  • 从用户那里获取密码
  • 从数据库中获取用户的哈希值
  • 将用户提供的哈希和密码传递给BCrypt CheckPassword方法
  • BCrypt返回true或false,具体取决于密码是否匹配

答案 1 :(得分:3)

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

记得加盐!

答案 2 :(得分:2)

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

使用SHA512Managed

答案 3 :(得分:0)

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

该文章涵盖了SQL 2005 - 对于SQL 2008的开始here

  

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