如果密码用“盐”加密,如何检查数据库中的密码?

Sal*_*ery 2 security authentication passwords hash web

我读过“对密码加盐”的方法可以提高密码保护。但我不明白如果密码以复杂的形式存储,如何检查密码。我假设用户的密码在客户端上进行了加密,然后将其哈希代码与数据库中的哈希代码进行比较。我没有网络开发经验。我正在学习网络安全的方法。

den*_*maz 5

既然您告诉我您目前正在学习它,我将尝试提供一些介绍。并会尽量使其简短。

  • Salt是我们生成并添加到纯密码/密码短语中的随机字符串。它可以存储plain在数据库中,紧邻Hash Value.
  • Hashing是将数据映射到固定长度值的一种方法。该值称为Hash Valuechecksum。哈希是单向的。MD5 和 SHA256 是散列算法的一些示例。

盐的好处

我们在这里所做的基本上是确保所有用户都有唯一的密码(在哈希输出中)。这将避免可能的攻击者捕获用户数据以同时计算多个用户的密码。

换句话说,当有人查看所有用户名和密码时,他们将无法说出哪些用户使用相同的密码。

下表可以帮助我们更好地理解它。

| username | salt             | plain-password |salted-password-to-be-hashed | hashed-password                                                  |
|----------|------------------|----------------|------------------------------|------------------------------------------------------------------|
| user1    | db97913154884d72 | password1      | password1db97913154884d72     | 5027a576d161385ddcc72e47280f85729fc3ba5e48e0a018e2f68dc7d13e93cc |
| user2    | 8fc2884d127fd40b | password1      | password18fc2884d127fd40b    | 6069e0e5a06d41ed0ffb06d0c0e26dd7dea3cb14de80e4075848d3217b40b783 |
Run Code Online (Sandbox Code Playgroud)

以下步骤演示了存储和身份验证的基本方法。

如何储存?(登记)

  • plain-password从客户端通过 到达您的后端应用程序https
  • 后端应用程序生成一个salt并将其附加(或前置)到纯密码中。
  • hashed-password然后,使用哈希算法(例如 SHA-256、MD5 等)计算
  • 最后,将usernamesalt和存储hashed-password到数据库中。(切勿存储plain-password和/或salted-password-to-be-hashed。)

如何认证?

  • plain-password从客户端通过 到达您的后端应用程序https
  • 后端应用程序salt从数据库中获取特定于用户的信息并将其附加(或前置)到纯密码中。
  • 然后,使用相同的哈希算法计算hashed-password并将其与存储的进行比较。

更高级一点:

您还可以添加第二种盐,称为pepper。这是要添加到纯密码中的另一个随机字符串(pepper + 纯密码 + salt)。但是在这里,pepper存储在另一个数据源中,而不是在salt和旁边hashed-password