当前位置: 首页 > 面试题库 >

散列和盐化值

熊锐进
2023-03-14
问题内容

我正在开发一个小型的Web应用程序,该应用程序在内部对用户进行身份验证。一旦用户通过身份验证,我的Web应用程序便会将一些信息(例如userID和Person的名称)传递给第三方Web应用程序。第三方开发人员建议我们对值进行哈希处理和加盐处理。

原谅我的无知,但这到底意味着什么?

我正在用Java编写应用程序。因此,我打算做的是使用Apache Commons Digest Utils
SHA512对userID,Person的名称和一些Math.random()值进行盐值哈希处理,并将该哈希字符串与userID和person的名称一起传递。

这是标准做法吗?我应该把第三方的盐也正确吗?


问题答案:

盐通常用于安全地存储密码哈希。散列用于存储或通信的密码(以致他人无法读取)很容易通过使用彩虹表进行解码。现在,当您向密码添加随机字符串,但将字符串与哈希一起存储时,这将变得更加困难。计算这个新的哈希看起来像:

hash(password + salt)

甚至

hash(hash(password) + salt)

为了安全地登录第三方网站,可以发送用户ID,加盐的哈希(从上面)和您使用的盐(如果未提供)。根据该网站存储密码的方式,您可以自己生成盐,也可以从中索要盐。

一种选择是先将UserID发送到网站,然后让其响应,然后再发送hash(password+salt))回网站。



 类似资料:
  • 我试图学习密码学,用散列和盐析在数据库中保存密码,所以我决定做一个登录系统来实现这个系统。 我的数据库包括 UserID int PK 用户名varchar(250) Salt varbinary(64) 密码varbinary(64) RegDate日期时间 电子邮件varchar(250) 我正在使用PBKDF2,但似乎这不是散列/盐析方法,如果不是呢? 如果是这样,我做得对吗? 我的钥匙 将

  • 我模拟存储密码散列,并在登录过程中验证它。 我有一个名为的方法来获取字符串密码,并通过添加盐返回它的哈希值。 我选择一个静态值,在本例中,我选择一个相同的密码值() 但结果是: 为什么这两个值不相同? 我的代码有什么问题?

  • 虽然我理解加盐和散列密码过程背后的神学,但我不太理解方法论。据我所知,这个问题及其相关答案中列出的方法,以及MSDN的这篇文章,都经历了创建不同长度的salt的步骤,以便在散列给定密码的过程中使用。 但是,稍后检查密码怎么样?据我所知,再次创建哈希将导致生成全新的盐,最终导致在尝试登录时验证失败。 我是否错过了盐或盐配方的保存位置?还是我不太了解这个过程?

  • 我想在C#中使用PBKDF2加胡椒和盐来散列密码。我对密码学有点陌生,所以如果我错了,请随时纠正我。 我之所以使用Rfc2898DeriveBytes类,是因为(根据其他Stackoverflow用户的说法)bcrypt和其他哈希算法在C#中不受本机支持和验证,因此可能会造成安全威胁。这篇文章的目的不是开始讨论哪种哈希算法是最好的。 我的目标是:每个密码都会得到一个随机的盐和胡椒,密码会经过一定数

  • 我用这个教程来帮助我,当用户创建一个帐户时,对他们的密码进行加盐和散列,然后当用户输入密码登录时,将这些密码带回来并进行比较。 在这个图坦卡蒙中,它们有两个我想调用的函数。 和 我随后自己创建了另一个函数,它会爆炸结果,因此我可以从整个have中剥离加盐字符串。 所以当我在数据库中插入数据时,它看起来像这样 请注意,最后一列包含第三列中字符串的最后一部分。 因此,最后一步是登录时,用户将输入他们的

  • 我对哈希比较陌生,我使用SHA-256和一种自制的生成盐的方法生成了值的哈希。它涉及为随机盐生成器的每个输入确定地找到种子。现在我想验证散列值的完整性,并检查添加的盐的有效性。然而,我不知道该怎么做。有人能帮忙吗?