我是一个(近乎完全的)初学者,这是我第一次尝试加密 - 实际上,这可能是我第一次使用这个词。
我的问题是:对于非银行/军事,甚至商业网站应用程序,选择用于密码哈希函数的盐的正确方法是什么?
我可以轻松地为每个新用户生成伪随机盐,并在应用哈希函数之前将该盐附加到他们的密码中。但我仍然需要存储盐,因此可能会获得访问散列密码的任何人也会获得盐。
盐的好处是否仅仅是使密码“更随机”,从而击败标准基于字典的彩虹表?
以下哪些想法是好的和实用的:
- 将盐存储在单独的数据库中-可能是单独的系统,绝对是不同的主机,名称,密码等。
- 基于用户名(或名字+姓氏,或注册日期)的哈希值生成盐,可能使用不同的哈希函数? 然后盐本身不会存储在数据库中-仅用于计算它的数据...
- 在数据库中存储一个将哈希密码和盐连接起来的值,以一种不明显的方式(例如,盐是10个随机密钥,并且它们被注入在哈希密码中的字母数字1和2、4和5、8和9之间等)。
作为一个附加问题,当升级网站软件时更改加盐哈希算法有多容易? 现在感觉像是噩梦。