security - 加密后如何更改aes-256 key ?

标签 security aes

我有一个网站,用户提交他们的个人数据,我正在考虑使用 aes-256 加密这些数据,他们的密码用作加密的 key ,然后我将加密的数据存储在 mysql 数据库中......

现在,如果用户更改了他的密码,我将如何更改加密数据的 key

我应该从数据库中收集所有数据,然后用旧 key 解密他们的数据,然后用新 key 再次加密吗?

最佳答案

当他们更改密码时,您不需要重新加密用户的所有数据。

生成一个 key 来加密用户的数据;称之为“内容加密 key ”。从用户的密码中获取 key ;称之为“ key 加密 key ”。使用“ key 加密 key ”加密“内容加密 key ”。将加密的 key 与盐和用于 key 派生的迭代次数一起存储。

如果他们更改了密码,请使用旧密码解密内容加密 key ,然后使用从新密码派生的 key 重新加密。您应该为新密码选择一个新盐,并确保将它与新的加密 key 一起存储。

由于内容加密 key 是从一个巨大的空间中随机选择的,因此您可以安全地使用ECB作为加密方式。

不要简单地对密码进行散列,即使您使用了盐,即使您使用了尚未破解的算法。您需要重复哈希操作数千次。在大多数平台上都有用于(正确)执行此操作的库。使用 key 派生算法(PBKDF2,来自 PKCS #5)从密码创建 key 。

这个概念遵循 the draft for password-based S/MIME encryption.

关于security - 加密后如何更改aes-256 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8981653/

相关文章:

java - JAVA和PHP AES加密之间的区别

security - symfony2 中的两步验证

security - 防止民意调查泛滥

php - 如何在 PHP 中安全地维护持久的 SSH 连接?

c# - 将 CryptoStream 解密为 MemoryStream

encryption - Microsoft CNG BCryptEncrypt 返回密文 == 明文

android - 在 Kotlin 中使用 ByteArrays 和 SecretKeySpec

带有 KeyStore 和 ServerSockets 的 Java SSL/TLS

c# - 如何运行 IdentityServer3 示例?

PHP 使用 AES、ECB 模式 block 和 PKCS5Padding 生成对称 key