V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yanqing07
V2EX  ›  问与答

请问用对称加密,在数据库保存用户密码有什么优缺点呢?

  •  
  •   yanqing07 · 2020-05-06 11:50:54 +08:00 · 2152 次点击
    这是一个创建于 1664 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在所知道的情况
    优点:

    1. 可以知道用户密码(狗头)

    缺点:

    1. 密钥保存的风险。服务器被黑,用户密码就都知道了

    还有其他优缺点吗?大家可以补充下么

    第 1 条附言  ·  2020-05-06 14:03:22 +08:00
    为什么要知道用户密码?
    这是因为客户想要把这些用户导入到另一个商业系统。但是,原系统的密码都是 hash 后的密码。所以,现在希望用对称加密,这样就能还原密码了
    第 2 条附言  ·  2020-05-06 14:07:38 +08:00
    再补充下。其实,优缺点应该加个对比对象,所以应该相对 hash 算法的来对比。
    而且,理性讨论下。为什么就不能用对称算法呢?
    15 条回复    2020-05-11 11:23:52 +08:00
    AngryMagikarp
        1
    AngryMagikarp  
       2020-05-06 11:54:24 +08:00   ❤️ 1
    第一个根本不算优点,你需要知道用户密码干嘛,除非你本来就想通过这种手段钓鱼,然后去黑用户的其他帐号,比如邮箱什么的。

    在这个系统里,你要做的任何操作都可以绕过密码验证,因为系统就是你们自己开发的。
    zqqian
        2
    zqqian  
       2020-05-06 11:55:36 +08:00
    要知道用户的密码?
    你是搞黑产的吗?用来撞库?
    lizytalk
        3
    lizytalk  
       2020-05-06 11:56:31 +08:00 via iPhone
    可以知道用户密码是缺点好么....
    ysc3839
        4
    ysc3839  
       2020-05-06 11:56:59 +08:00
    如果“可以知道用户密码”属于优点的话,那不加密直接存储密码会更优,因为少了加密过程,理论上不加密的性能更高,占用空间更少 (不需要保存密钥)。
    zooo
        5
    zooo  
       2020-05-06 11:58:02 +08:00
    国内公司保存密码保存明文了吗?
    churchmice
        6
    churchmice  
       2020-05-06 12:08:37 +08:00
    他娘的为何要保存密码?你加盐 hash 一下不就好了吗
    JJstyle
        7
    JJstyle  
       2020-05-06 12:20:56 +08:00 via iPhone
    加狗头你以为 v 友就不喷你了吗 🐶)
    dallaslu
        8
    dallaslu  
       2020-05-06 12:33:29 +08:00
    想知道用户密码并不一定要明文存啊,客户端传输过来时记录到任何地方都行。
    yanqing07
        9
    yanqing07  
    OP
       2020-05-06 14:05:40 +08:00
    @AngryMagikarp 我也觉得有点道理。系统是你的,用户使用了,那是不是有权处置用户的密码。貌似现在法律又没有这种限制。。。
    yanqing07
        10
    yanqing07  
    OP
       2020-05-06 14:08:56 +08:00
    @dallaslu 的确是。数据到了服务端,再去将这些明文存下来,貌似也不会存在什么问题。
    ipwx
        11
    ipwx  
       2020-05-06 14:09:56 +08:00
    这是因为客户想要把这些用户导入到另一个商业系统。但是,原系统的密码都是 hash 后的密码。所以,现在希望用对称加密,这样就能还原密码了

    ----

    下次用户登录的时候,通过验证了,就把内存中的密码用一下,但你们也不存储。这是最符合道德的做法。
    msg7086
        12
    msg7086  
       2020-05-07 04:16:52 +08:00
    用对称加密保存用户密码,就等于不加密保存用户密码。

    不加密保存用户密码的优缺点你应该都知道了。

    用户导入另一个系统可以双系统同时认证,即登录的时候如果另一个系统里没有设置密码,则用原系统 hash 验证,然后直接将通过验证的原始密码设置进新系统。整个过程明文密码在内存里也就存在几毫秒的时间,基本是安全的。

    如果客户的目的是得到明文密码,那么直接存明文密码就行了。毕竟明文密码终究是可得的,加密能有什么用呢。
    yanqing07
        13
    yanqing07  
    OP
       2020-05-07 11:39:28 +08:00
    @ipwx
    @msg7086
    看来在内存里使用下密码,这样简单直接点。换加密方式还麻烦。反正风险告诉客户了,剩下就由他们自己考量了
    lordofhollows
        14
    lordofhollows  
       2020-05-07 12:07:46 +08:00
    让客户提供一个密码,使用该密码生成非对称加密的私钥、公钥,用户密码使用公钥加密后存到数据库。
    验证用户登录的时候,使用公钥加密用户密码后再与数据库中存的进行比对。
    客户要导出数据时,提示输入密码,然后使用该密码和私钥将用户密码解密。
    这样如果被拖库,也无法拿到用户密码明文。
    缺点的话,如果客户把密码忘了,或者私钥丢了,用户密码就无法还原了。
    yanqing07
        15
    yanqing07  
    OP
       2020-05-11 11:23:52 +08:00
    @lordofhollows 这思路不错。谢谢你的建议
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3057 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:14 · PVG 22:14 · LAX 06:14 · JFK 09:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.