【问题标题】:How to (salt and hash) and store a password in java..Then check the password if matches to a user's manual input如何(盐和哈希)并在java中存储密码..然后检查密码是否与用户的手动输入匹配
【发布时间】:2020-04-22 16:17:40
【问题描述】:

所以我用java编写了一个寄存器和一个登录系统。我的注册计划是:用户输入用户名,然后输入密码。

密码被加盐并存储在 .txt 文件中。 现在当用户必须输入登录系统的密码时,我如何检索原始密码以从 .txt 文件中进行检查?

我的问题有两个: 我如何对密码加盐然后存储它。 怎么找回原来的密码,所以去查一下。

我已经搜索了很多东西,但我一无所获。

【问题讨论】:

  • 据我所知,您应该对密码进行加盐和加密并以这种方式保存。然后你应该对输入的密码进行加盐和加密,并检查它们是否匹配,但永远无法检索到原始密码。如果你能找回原来的那是不安全的
  • 您的术语有误。我的猜测是您对密码进行加盐和 散列。加盐包括在密码中附加或附加一些随机值。散列包括将加密摘要函数应用于盐+密码。根据定义,摘要是一种方式。如果您可以从哈希中找到密码,它将破坏哈希的整个目的,而这正是为了防止这种情况。您需要使用相同的盐对用户的密码进行加盐,应用相同的加密摘要,并将新的哈希值与存储的哈希值进行比较。
  • @JB Nizet 你是对的。这就是我需要的。我在哪里可以找到类似的东西,因为我对密码学一无所知
  • 查看github.com/Ninja-Squad/globe42/blob/master/backend/src/main/… 的示例(在 Kotlin 中,但它非常接近 Java)。

标签: java passwords salt


【解决方案1】:

您保存了加盐密码和加盐密码。因此,在保存密码时,请执行以下操作:

  • 创建盐(一定长度的随机哈希)
  • 哈希密码+盐组合
  • 存储此散列字符串,同时存储盐和用户名。

不要存储明文密码!

当用户稍后尝试登录时,您执行以下操作:

  • 检索哈希密码和盐(与用户名一起存储,因此按用户名查找)
  • 哈希密码(由要登录的用户提供)+盐
  • 将此哈希字符串与您存储的哈希密码进行比较。
  • 如果它们相等,则用户提供了正确的密码。

因此,您永远不会将用户提供的明文密码与您保存的明文密码进行比较,因为保存明文密码是不安全的,以防数据泄露。

【讨论】:

  • 这正是我所需要的。但是我对密码学很陌生,而且我的知识一般为零。我在哪里可以找到像你描述的这样的东西?
  • 请不要使用“加密”一词。需要的是一瓦哈希或摘要。不是加密。加密包括使用密钥进行加密,并使用密钥解密并找到原始文本。这不是这里应该使用的。
  • this blog 很好地解释了为什么应该使用独特的盐(以防止彩虹表攻击)。还是您的问题更多的是您应该编写什么 Java 代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 2015-09-28
  • 2012-11-07
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多