以下是一个典型的 Hash 算法加盐思路:

1
Hash算法(Hash算法(密码)+盐)

1、使用慢 Hash 算法可以拖延破解时间【重要】

2、使用和 Hash 函数输出的字符串等长的盐值,比如 SHA256 算法的输出是 256bits(32 bytes),那么盐值也至少应该是 32 个随机字节【重要】

3、使用随机盐还是固定盐,取决于程序是否被泄露,

一般认为,数据库是第一个被泄露的,那么随机盐是直接被拿走了,而嵌入于程序中的固定盐是安全的;

但是,能入侵到数据库的黑客一般程序也顺手可以拿走了,所以固定盐反而降低了后续彩虹表的建立时间,

所以使用随机盐虽然免不了随机盐、密码和算法一起被泄露,但能增加彩虹表攻击的成本(每一个盐都需要建立一个彩虹表,能增加一丢丢破解时间)

我认为默认使用随机盐是好事,但是有些特殊情况下使用固定盐反而能取胜