我有一个网站,用户提交他们的个人数据,我正在考虑使用aes-256加密这些数据,他们的密码被用作加密的密钥,然后我将加密的数据存储在mysql数据库中......
现在,如果用户更改了密码,我将如何更改加密数据的密钥
我应该从数据库中收集所有数据,然后使用旧密钥解密其数据,然后使用新密钥再次对其进行加密?
eri*_*son 14
更改密码时,无需重新加密所有用户的数据.
生成密钥以加密用户的数据; 称之为"内容加密密钥".从用户密码中导出密钥; 称之为"密钥加密密钥".使用"密钥加密密钥"加密"内容加密密钥".存储加密密钥以及salt和用于密钥派生的迭代次数.
如果他们更改了密码,请使用旧密码解密内容加密密钥,并使用从新密码派生的密钥对其进行重新加密.您应该为新密码选择一个新的盐,并确保将其与新的加密密钥一起存储.
由于内容加密密钥是从大空间中随机选择的,因此在加密时可以安全地使用ECB作为密码模式.
即使你使用了一个尚未完整的算法,也不要简单地对密码进行哈希处理,即使你使用了salt.您需要重复数千次哈希操作.在大多数平台上都有用于(正确)执行此操作的库.使用密钥派生算法(来自PKCS#5的PBKDF2)从密码创建密钥.
此概念遵循基于密码的S/MIME加密的草案.