使用RSACryptoServiceProvider类将加密密码插入DB?

时间:2009-08-22 09:26:23

标签: c# authentication encryption

我有客户端使用的WCF服务,以下是我当前用户身份验证的实现,我想要一个建议来增强它或更好的机制。

  • 我正在使用RSACryptoServiceProvider class(RSA实现)将加密的用户密码保存到数据库中

  • 客户端应使用公钥(存储在文件中)每次登录时加密密码,并将其发送到使用用户名的日志记录方法

  • 在服务器端登录方法 选择加密密码 提供的用户名和比较解密的密码(由用户和数据库发送)使用私钥

    注意:每次加密时都会 使用RSA与同一公共字符串 键生成一个新的加密字节, 所以我无法比较加密 密码,我必须解密它们才能进行比较

P.S 答案说“出于身份验证的目的,您应该避免使用可逆加密存储密码”

我问是否有人可以解密密码,除非他有私钥,所以问题是什么,即使散列也不可逆,但是它已经坏了!!

2 个答案:

答案 0 :(得分:3)

存储加密而非散列的密码并不常见。你有什么特别的理由这样做吗?

如果不是,我建议用盐存储密码哈希值(SHA-2或类似的东西)。

答案 1 :(得分:0)

我认为有两个问题需要注意:

  • 如何安全地传输密码?
  • 如何安全地存储密码?

password based key agreements等现有SRP解决了这两个问题。

使用RSA加密密码的解决方案并不是一个坏主意,但仅是部分解决方案:由于RSA随机加密,因此可以防止脱机字典攻击。根据您的描述,您的提案是否会阻止重播攻击尚不清楚。攻击者可以通过发送以前截获的加密密码登录,还是有时间戳等对策?