1

给定一个原始密码

  1. 创造一种独特的盐
  2. 将其附加到原始密码
  3. brcypt / SHA512 这个组合使用随时间变化的一次性密钥
  4. 将加密的密码和盐存储在用户表中

验证身份

  1. 将盐附加到原始密码
  2. bcrypt / SHA512 组合验证
  3. 根据 db 散列值检查散列值

在验证部分,如果当前密钥不再相同怎么办?我是否应该始终保留旧密钥列表并对其进行迭代以验证该旧密码是否是使用其中一个旧密钥生成的?如果验证者返回 true,我将更新新的加密密码。

另外,我怎样才能确定盐对每个用户的每个密码都是唯一的?

这就是我需要做的吗?

有什么遗漏吗?谢谢。

4

1 回答 1

2

确保盐是唯一的很容易 - 您可以将用户名和密码最后更改的时间散列在一起。

至于加密,只有当您出于某种原因想要存储用户密码时才需要这样做,而不仅仅是能够验证它。只存储密码和盐的哈希值更常见也更安全。不需要密钥,即使攻击者破坏了数据库,他们也将难以恢复密码。唯一的缺点是你不能告诉用户他们的密码,你只能重置他们。

于 2012-08-20T18:33:37.950 回答