我有客户端使用的WCF服务,以下是我当前用户身份验证的实现,我想要一个建议来增强它或更好的机制。
我正在使用RSACryptoServiceProvider class(RSA实现)将加密的用户密码保存到数据库中
客户端应使用公钥(存储在文件中)每次登录时加密密码,并将其发送到使用用户名的日志记录方法
在服务器端登录方法 选择加密密码 提供的用户名和比较解密的密码(由用户和数据库发送)使用私钥
注意:每次加密时都会 使用RSA与同一公共字符串 键生成一个新的加密字节, 所以我无法比较加密 密码,我必须解密它们才能进行比较
P.S 答案说“出于身份验证的目的,您应该避免使用可逆加密存储密码”
我问是否有人可以解密密码,除非他有私钥,所以问题是什么,即使散列也不可逆,但是它已经坏了!!
答案 0 :(得分:3)
存储加密而非散列的密码并不常见。你有什么特别的理由这样做吗?
如果不是,我建议用盐存储密码哈希值(SHA-2或类似的东西)。
答案 1 :(得分:0)
我认为有两个问题需要注意:
password based key agreements等现有SRP解决了这两个问题。
使用RSA加密密码的解决方案并不是一个坏主意,但仅是部分解决方案:由于RSA随机加密,因此可以防止脱机字典攻击。根据您的描述,您的提案是否会阻止重播攻击尚不清楚。攻击者可以通过发送以前截获的加密密码登录,还是有时间戳等对策?