用户登录时如何重新添加"unique"盐?



我正在学习哈希和加密,似乎不能理解这个:

客户:新用户登录=>创建密码=>以明文形式发送到服务器

服务器:服务器生成随机的"盐"。=比;纯文本和盐统一=>散列函数(例如SHA-3)将密码+salt散列成Hash =>哈希存储在DB中。

客户:同一用户注销和登录=>以明文形式发送给服务器的密码。

服务器:密码需要重新添加创建帐户时生成的相同盐以获得相同的哈希值。

服务器如何生成相同的随机且唯一的盐?盐是否完全存储在不同的数据库中?如果数据库被攻破,黑客也可以获得盐的访问权,用盐对彩虹表进行暴力破解,并将其解算。

随机生成的盐必须存储在数据库并链接到登录的用户。它可以简单地作为用户表中的另一列添加。

在一个典型的设置中,盐和密码(或其之后的版本)密钥拉伸)被连接起来并使用密码进行处理哈希函数,并输出哈希值(但不是原始的)密码)与盐一起存储在数据库中

来源:https://en.wikipedia.org/wiki/Salt_(cryptography)检索19/02/21

盐的生成取决于你使用的技术。下面的堆栈溢出回答有一个PHP示例:

我们可以使用uniqid()在PHP中生成一个唯一的Salt吗

密码也不应该以纯文本的形式发送给服务器。这可以通过HTTPS完成,例如

用户再次登录时。密码与电子邮件一起发送到服务器端。

电子邮件用于获取用户记录,然后根据该电子邮件保存的Hash值与新散列(输入盐+密码)进行比较。

validate函数方法匹配两个不同的哈希值,并检查输入的密码是否相同。

例如,我在Node JS中使用bcrypt,它有一个方法compareSync,它将输入的密码与保存的哈希值相匹配bcrypt.compareSync(password, databaseHash);

最新更新