假如有一堆数据,通过 AES 加密后存入数据库,密码由用户设定,有没有什么方案能实现一次性统一修改密码,还是一定要一条一条数据先读取出来,用旧的密码解密后再用新的密码加密?
1
locoz 2020-01-11 01:44:05 +08:00 via Android 2
数据加密用的密码随机生成,然后用用户设定的密码来加密这个密码,用户输入密码实际上是把这个密码解密出来?这样就变相实现一次性统一修改密码了(因为修改的只是解密密码用的密码)。
不过这种做法不太实际…会增加特殊场景下的安全风险… |
2
T0m008 2020-01-11 03:50:12 +08:00
只能解密重新加密。如果能不用解密就能修改密码,那这个加密还有什么意义?
|
3
laminux29 2020-01-11 08:03:16 +08:00 4
数据被加密时使用的秘钥,为存储秘钥。这玩意是第一次生成后就不能也不应该修改的,不然所有的数据都会被重新解密加密,性能消耗太大。
业界的做法是,用户密码是用来加密存储秘钥的,而不是把用户密码用来加密数据。这样用户每次修改密码,只需要把存储秘钥进行解密后重加密就行了。 |
4
zy445566 2020-01-11 08:45:18 +08:00 via Android
我不建议你这样搞,如果希望用户能自己修改密码其实很简单,给密码字段加版本,比如$01$这表示第一个版本,每个版本对应加密和解密方式,如果原来没版本就用原来的方式登录,再提示他修改密码就好了
|
5
cigarzh 2020-01-11 09:06:41 +08:00
什么奇葩需求……
|
6
gDD 2020-01-11 09:38:37 +08:00 via iPhone
#3 楼正解,很普遍的需求。
|
7
loser7758 2020-01-11 10:35:25 +08:00 via Android 1
我在做个人云笔记的时候有过和楼主一致的需求
这里提出一个假设方案 数据库可以存储 aes 加密映射关系 比如加密后的文章 id 当然 文章用加密后的密钥 这个加密密文类似于 jwt 客户存储 jwt 密钥 服务端验证密钥可以 sha256 所以 这个 jwt 应该存储 加密文章 id 加密随机生成的密钥 创建时间 修改时间等属性 在修改密码的时候 也只是更新全部的 jwt 而不是全部文章 除非是更新文章加密密钥 文章分享的时候可以复制一份文章内容出来 加个类似于百度盘分享码的机制 说句题外话 前端 aes 加密会保护后端数据 数据传输都不可信 但是如何防止后台被 gank 后向前端注入 一方面可以类似钉钉的某盾 出 api 走一遍第三方服务器 或者去某网加密一遍数据出来 还有吐槽一下 楼主提问问题为什么大家都是说不这么这么做 有些时候我们不就是要解决千奇百怪的需求而工作的么 |
8
Rheinmetal 2020-01-11 18:51:40 +08:00 via Android
通过操作密文的方式操作原文?
|
9
Stain5 2020-01-12 12:08:04 +08:00
这样如何 用新密码把旧密码加密了,用的时候在用旧密码去解密数据。
只要不被同时脱裤+ 泄漏旧密码 就不会有什么安全问题吧? |