用户提供密码(password)来加密用户的数据,但是通常用户提供的密码较为简单。有没有一个可靠的方案来根据用户密码生成密钥来加密数据,使得加密数据不容易被常规破解?
简单点的方案是使用一个服务端生成的与用户相关的随机串作为盐 salt ,然后生成真正的对称加密密钥(password 和 key 都不存储在服务端,而 salt 存储在服务端),如 key=sha256(password+salt)
但是这样其实最大的隐患是 salt 表不能丢,一旦 salt 表泄漏,还是难免被穷举,而且用户经常使用有意义的词,所以较容易破解成功。