一尘不染

散列和盐化值

java

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

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

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

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


阅读 283

收藏
2020-12-03

共1个答案

一尘不染

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

hash(password + salt)

甚至

hash(hash(password) + salt)

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

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

2020-12-03