繁体   English   中英

将使用RSACryptoServiceProvider类的加密密码插入数据库?

[英]Inserting encrypted password using RSACryptoServiceProvider class into DB?

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

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

  • 客户端应在每次登录时使用公共密钥(存储在文件中)对密码进行加密,并将其发送给具有用户名的登录方法

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

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

PS答案说:“出于身份验证的目的,应避免使用可逆加密来存储密码”

我要问的是,除了拥有私钥之外,没有人可以解密密码,这是什么问题,即使哈希是不可逆的,但它还是坏了!

存储加密而不是散列的密码是不常见的做法。 您是否有任何特定原因?

如果没有,我建议用盐存储散列的密码(SHA-2或类似名称)。

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

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

现有的基于密码的密钥协议(例如SRP)解决了这两个问题。

使用RSA加密密码的解决方案不是一个坏主意,而只是部分解决方案:由于RSA随机化了加密,因此可以防止离线字典攻击。 根据您的描述,尚不清楚您的建议是否可以防止重放攻击。 攻击者可以通过发送先前拦截的加密密码来登录,还是您有诸如时间戳之类的对策?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM