V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nyse
V2EX  ›  程序员

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

  •  
  •   nyse · 2020-01-11 01:10:05 +08:00 · 3253 次点击
    这是一个创建于 1776 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    还有吐槽一下
    楼主提问问题为什么大家都是说不这么这么做
    有些时候我们不就是要解决千奇百怪的需求而工作的么
    Rheinmetal
        8
    Rheinmetal  
       2020-01-11 18:51:40 +08:00 via Android
    通过操作密文的方式操作原文?
    Stain5
        9
    Stain5  
       2020-01-12 12:08:04 +08:00
    这样如何 用新密码把旧密码加密了,用的时候在用旧密码去解密数据。
    只要不被同时脱裤+ 泄漏旧密码 就不会有什么安全问题吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3085 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 13:39 · PVG 21:39 · LAX 05:39 · JFK 08:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.