Passwords 试图理解在密码中添加盐的概念

Passwords 试图理解在密码中添加盐的概念,passwords,cryptography,Passwords,Cryptography,我知道如果我们只是散列一个密码,黑客可以使用预先计算的散列密码表,并将其与实际的散列密码表进行比较。据我所知,如果我们在散列之前添加一个随机字符串作为salt,那么预先计算的散列表将无法工作 现在我的问题是,假设一个用户密码是“password”,我将999添加到其中,并在保存之前对字符串“password999”进行散列。现在,当用户返回我的站点时,我如何知道我需要在他的密码中添加999,然后再将其与数据库中的哈希值进行比较?我是否为每个用户名维护一个单独的表,其中包含所有的salt?您需要将

我知道如果我们只是散列一个密码,黑客可以使用预先计算的散列密码表,并将其与实际的散列密码表进行比较。据我所知,如果我们在散列之前添加一个随机字符串作为salt,那么预先计算的散列表将无法工作


现在我的问题是,假设一个用户密码是“password”,我将999添加到其中,并在保存之前对字符串“password999”进行散列。现在,当用户返回我的站点时,我如何知道我需要在他的密码中添加999,然后再将其与数据库中的哈希值进行比较?我是否为每个用户名维护一个单独的表,其中包含所有的salt?

您需要将每个用户的salt存储在密码旁边的一个单独的列中。

您可以根据其他常量用户数据(如id、,或者独立存储后者更安全2alexey:我认为生成随机盐并存储它比从其他常量计算它要安全得多……或者在同一列中;以类似于
salt:hash
的格式存储散列密码是很常见的。两种方法都可以很好地工作;就数据库而言,密码散列只是不透明的blob。