remember5
V2EX  ›  Vue.js

vue-cli 使用 aes 加密,打包后如何隐藏 aesKey?

  •  
  •   remember5 · Jun 15, 2020 · 6138 views
  •   You need to sign in to view this topic
    This topic created in 2276 days ago, the information mentioned may be changed or developed.

    简述

    java 程序员,会点 vue,现在有个项目中有部分数据需要加密,采用 aes 加密通信,但是我怎么把 aes 的 key 存储下来呢?

    我考虑是把文件一起加密,这样就不会展示 key 了,所以查了资料,发现 vue-cli 可以混淆加密的插件uglifyjs-webpack-plugin 按照网上教程发现并没有加密 key,后来又找了webpack-obfuscator 尝试不成功,还请 懂得大佬给个提示,谢谢

    使用环境

    vue 2.6.11

    vue-cli 4.4.1

    html-webpack-plugin 3.2.0

    25 replies    2020-06-17 13:02:20 +08:00
    icanfork
        1
    icanfork  
       Jun 15, 2020
    前端没有加密这个说法,都是光裤子的
    2kCS5c0b0ITXE5k2
        2
    2kCS5c0b0ITXE5k2  
       Jun 15, 2020
    前端加密用非对称啊.
    remember5
        3
    remember5  
    OP
       Jun 15, 2020
    @emeab 可是解密的话也会有私钥,这个私钥没想明白要怎么存储
    myd
        4
    myd  
       Jun 15, 2020
    动态生成,从服务器获取密钥
    kanezeng
        5
    kanezeng  
       Jun 15, 2020
    @remember5 只能非对称吧,前端存公钥来加密,后端用私钥解
    remember5
        6
    remember5  
    OP
       Jun 15, 2020
    @kanezeng 可是我这个前台也需要解密数据,所以前台也要保存私钥,考虑存储麻烦,所以就选择用 AES,但是发现 AES 的 key 如果写死的话,webpack 打包也会暴露出来
    2kCS5c0b0ITXE5k2
        7
    2kCS5c0b0ITXE5k2  
       Jun 15, 2020
    @remember5 js 加密好像都是前端加密 后端解密
    kanezeng
        8
    kanezeng  
       Jun 15, 2020
    @remember5 那你只能动态生成了,每次登录时和 token 同时下发一个?过期时间可以短一点,甚至可以每个 api 调用换一个
    remember5
        9
    remember5  
    OP
       Jun 15, 2020
    @kanezeng 嗯嗯,这个方案可以,相对来讲比较安全,就是耗时,开销大, 谢谢大佬 🙏
    est
        10
    est  
       Jun 15, 2020
    DH 密钥交换?
    zzzmh
        11
    zzzmh  
       Jun 15, 2020
    收藏了,这个真的有用,我最近也在看
    如果是前端加密也好混淆也好,只能阻止 90%的人写一些爬虫什么的,理论上无法根除。
    之前百度上看到一个方案是
    后端生成 RSA 的公私钥,通过接口先请求到公钥,然后前端生成 AES 的秘钥和偏移量,前端用公钥加密 AES 的秘钥偏移量,用 AES 加密数据,再把数据和加密后的秘钥偏移量,给后端用 RSA+AES 解。
    我仔细品了品,感觉还是治标不治本。
    所以。。。还是需要继续学习,看看 V 站大神们是怎么解决这个问题的。
    areless
        12
    areless  
       Jun 15, 2020 via Android
    客户端及服务端设置两对 rsa 互投公钥 加密动态 aes 密钥 aes 加密内容~互联网上私钥别乱传。。。这就是完美的浏览器端对端加密。可以采用内存使用数做随机数种子,产生 aes 密钥及偏移量
    InkStone
        13
    InkStone  
       Jun 15, 2020
    这个问题,Java 跟 JS 是一样的。Java 的应用,直接存个密钥也跟裸的没什么区别。

    比较靠谱的方案还是动态生成,非对称公钥对对称密钥签名,再加防重放。
    areless
        14
    areless  
       Jun 15, 2020 via Android
    从服务端获取客户端公钥加密的 aes 随机数密码及服务端公钥,客户端私钥解密 aes ~ aes 加密内容及服务端公钥加密 aes 随机数密码,服务端私钥解密 aes 随机数密码获取内容,使用客户端公钥加密 aes 随机数密码,及 aes 加密回传内容。完成一次通讯,随机数密码作废。
    remember5
        15
    remember5  
    OP
       Jun 15, 2020
    @InkStone 请问如果前台需要进行解密的话,密钥如何存储呢?
    skypyb
        16
    skypyb  
       Jun 15, 2020
    只建议密钥协商, 虽然也防不了中间人攻击。
    上面那些说 RSA 的, 就 RSA 这效率, 确定要在接口上用?
    limuyan44
        17
    limuyan44  
       Jun 15, 2020
    其实就是照着 https 来一遍。
    ByteRan
        18
    ByteRan  
       Jun 15, 2020
    areless
        19
    areless  
       Jun 15, 2020 via Android
    @skypyb rsa 的效率跟加密字符串长度有关。如果只是加密 aes 密钥,比无加密减半。https 好像能达到无加密的 75%,其实还不错啦
    myCupOfTea
        20
    myCupOfTea  
       Jun 16, 2020
    其实都是脱裤子放屁的行为,不过还是有点用的,增加点放盗成本,别纠结安全不安全,都不安全
    InkStone
        21
    InkStone  
       Jun 16, 2020
    @remember5 ECDH 协商密钥吧。要防中间人就是 SSL-pinning+https 。不过这些最终还是防护不了从源码层面发起的攻击,只能提高攻击成本
    InkStone
        22
    InkStone  
       Jun 16, 2020
    @remember5 反正就记住一点:运行在别人电脑上的东西就默认为不安全的,密钥什么的可以做点防护,但还是要记住别人是可以窃取到的,你只能让窃取的成本大于窃取的价值
    zhuweiyou
        23
    zhuweiyou  
       Jun 16, 2020
    前端加密?密钥放在 JS 里?没用的。
    Reficul
        24
    Reficul  
       Jun 16, 2020
    再怎么玩都顶不住下断点+抓包慢慢分析
    remember5
        25
    remember5  
    OP
       Jun 17, 2020
    谢谢各位大佬的解答

    如大佬们所说,前端本身就不安全 引用#22 这位大佬说的"窃取的成本大于窃取的价值" ,所以暂时先采了密钥协商来加密。

    感谢关注话题的大佬们,另外几种方案有时间我也会试一下,后续有更好的解决方案会分享给大家
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3307 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 11:34 · PVG 19:34 · LAX 04:34 · JFK 07:34
    ♥ Do have faith in what you're doing.