为了账号安全,请及时绑定邮箱和手机立即绑定

SH256 Java 中的登录密码

SH256 Java 中的登录密码

慕娘9325324 2023-11-10 17:22:37
在我的 java 应用程序中,我的密码以 SH256 生成的十六进制表示形式加密发送到数据库。我对如何确定用户登录时是否具有正确的密码感到困惑。如果有人能指出我正确的方向,我将不胜感激。
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

您应该以散列形式存储密码。这样您将无法对其进行逆向工程以获取原始密码。现在您可能会问为什么要使用单向哈希来存储密码?问题是,您不希望任何人对数据库中的数据进行逆向工程。即使有人可以访问您的数据库,他们仍然无法知道实际的密码。现在谈谈如果您自己无法获得原始密码,如何验证密码。

问题是,你不必这样做。您只需让用户输入他的密码,然后对输入的密码进行散列(并且由于相同数据的散列将始终生成相同的散列)您可以轻松验证用户输入的密码和您散列的密码是否与已散列的相匹配并存储密码。

更简单的方法是,您必须在注册时获取密码p并将其作为散列密码存储在数据库中hashed_p。现在,当您想要登录或验证密码时,您再次要求用户输入密码。现在您将对p用户输入的密码进行哈希处理并生成哈希密码hashed_p。然后您将将此 hashed_p 与hashed_p数据库中的散列密码进行比较。

因此,要验证您必须检查用户输入的密码的哈希值是否等于数据库中存储的密码的哈希值。这就是密码散列的工作原理。


查看完整回答
反对 回复 2023-11-10
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

正确的做法是从前端获取密码,使用相同的算法对其进行加密,并将加密方式与存储的密码进行比较。



查看完整回答
反对 回复 2023-11-10
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

我们今天存储和验证用户密码的默认且最安全的方法是“加盐慢哈希”。(简单的哈希可能不够好)

以从 SH256 生成的十六进制表示形式加密到数据库。

假设您的意思是使用 SHA-256 对密码进行哈希处理。正如已经评论过的,加密和散列之间存在差异,在这个领域你需要清楚

我对如何确定用户是否拥有正确的密码感到困惑

  • 选择与用户密码的哈希值一起存储的盐

  • 使用盐对用户提供的密码(登录时提供)进行哈希处理

  • 从数据库中选择用户名和密码哈希匹配的用户记录


查看完整回答
反对 回复 2023-11-10
  • 3 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信