这是我获得的webapp登录方案.存在于数据库中的是两种盐和hmac(hmac(密码,盐1),盐2).
当用户进入登录页面时,他获得salt1.如果他已激活javascript,而不是发送明文密码,它将发送hmac(密码,salt1).如果他没有javascript,则会发送明文密码.
因此,在服务器端,当收到登录请求时,我们首先检查发送的内容(passwordSent)对抗hmac(passwordSent,salt2).如果它不起作用,我们会尝试hmac(hmac(passwordSent,salt1),salt2).
有人访问数据库应该无法使用密码哈希登录,我不认为(但我可能错了)多重hmacs会减少哈希阻力.有任何好的加密专家看到我可能做过的任何明显错误吗?