有没有什么方法能实现加密存储后的数据统一修改密码?

2020-01-11 01:10:05 +08:00
 nyse

假如有一堆数据,通过 AES 加密后存入数据库,密码由用户设定,有没有什么方案能实现一次性统一修改密码,还是一定要一条一条数据先读取出来,用旧的密码解密后再用新的密码加密?

3028 次点击
所在节点    程序员
9 条回复
locoz
2020-01-11 01:44:05 +08:00
数据加密用的密码随机生成,然后用用户设定的密码来加密这个密码,用户输入密码实际上是把这个密码解密出来?这样就变相实现一次性统一修改密码了(因为修改的只是解密密码用的密码)。
不过这种做法不太实际…会增加特殊场景下的安全风险…
T0m008
2020-01-11 03:50:12 +08:00
只能解密重新加密。如果能不用解密就能修改密码,那这个加密还有什么意义?
laminux29
2020-01-11 08:03:16 +08:00
数据被加密时使用的秘钥,为存储秘钥。这玩意是第一次生成后就不能也不应该修改的,不然所有的数据都会被重新解密加密,性能消耗太大。

业界的做法是,用户密码是用来加密存储秘钥的,而不是把用户密码用来加密数据。这样用户每次修改密码,只需要把存储秘钥进行解密后重加密就行了。
zy445566
2020-01-11 08:45:18 +08:00
我不建议你这样搞,如果希望用户能自己修改密码其实很简单,给密码字段加版本,比如$01$这表示第一个版本,每个版本对应加密和解密方式,如果原来没版本就用原来的方式登录,再提示他修改密码就好了
cigarzh
2020-01-11 09:06:41 +08:00
什么奇葩需求……
gDD
2020-01-11 09:38:37 +08:00
#3 楼正解,很普遍的需求。
loser7758
2020-01-11 10:35:25 +08:00
我在做个人云笔记的时候有过和楼主一致的需求
这里提出一个假设方案
数据库可以存储 aes 加密映射关系 比如加密后的文章 id
当然 文章用加密后的密钥
这个加密密文类似于 jwt 客户存储 jwt 密钥 服务端验证密钥可以 sha256
所以 这个 jwt 应该存储 加密文章 id 加密随机生成的密钥 创建时间 修改时间等属性
在修改密码的时候 也只是更新全部的 jwt 而不是全部文章 除非是更新文章加密密钥
文章分享的时候可以复制一份文章内容出来 加个类似于百度盘分享码的机制

说句题外话
前端 aes 加密会保护后端数据 数据传输都不可信
但是如何防止后台被 gank 后向前端注入
一方面可以类似钉钉的某盾 出 api 走一遍第三方服务器 或者去某网加密一遍数据出来

还有吐槽一下
楼主提问问题为什么大家都是说不这么这么做
有些时候我们不就是要解决千奇百怪的需求而工作的么
Rheinmetal
2020-01-11 18:51:40 +08:00
通过操作密文的方式操作原文?
Stain5
2020-01-12 12:08:04 +08:00
这样如何 用新密码把旧密码加密了,用的时候在用旧密码去解密数据。
只要不被同时脱裤+ 泄漏旧密码 就不会有什么安全问题吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/636997

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX