这些答案中的大多数都有点误导,并且表明了在 Salt 和加密密钥之间的混淆。包含 salt 的目的是修改用于散列每个用户的密码的函数,以便必须单独攻击每个存储的密码散列。唯一的安全性要求是每个用户都是唯一的,不可预测或难以猜测没有任何好处。
盐只需要足够长,以便每个用户的盐将是独一无二的。随机的64位盐甚至不太可能在10亿注册用户中重复,所以这应该没问题。单次重复的 salt 是一个相对较小的安全问题,它允许攻击者同时搜索两个帐户,但是在整个数据库中搜索的速度不会太快。即使是32位的盐在大多数情况下也是可以接受的,在最坏的情况下,它将使攻击者的搜索速度提高约58% 。增加超过64位的盐的成本并不高,但没有安全的理由这样做。