如何对图片加密使其避免被网盘屏蔽 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
AloneHero
V2EX    程序员

如何对图片加密使其避免被网盘屏蔽

  •  1
     
  •   AloneHero 2022-05-14 10:20:39 +08:00 via Android 7505 次点击
    这是一个创建于 1246 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说需求,我想把图片传到网盘上,再在自己的页面上通过请求网盘 api 来浏览图片,这里面会有解密图片数据的机会。

    现在问题在于,我怎么样能最简单的加密图片来保证不会被网盘屏蔽?

    现在初步的想法是对图片数据每一位异或 1 处理,只是不知道这种简单的处理方式 AI 能不能检测出来,希望有了解这方面的大佬指点一下。

    另外大家有没有什么简单高性能又可靠的图片加密方案呢?

    44 条回复    2022-05-16 10:41:34 +08:00
    KagurazakaNyaa
        1
    KagurazakaNyaa  
       2022-05-14 10:21:26 +08:00
    base64 内容,改后缀
    AloneHero
        2
    AloneHero  
    OP
       2022-05-14 10:24:53 +08:00 via Android
    @XiLingHost base64 不行,体积整体要膨胀 1/3 ,而且浏览器解码后体积膨胀更大,遇到大图估计会卡
    KagurazakaNyaa
        3
    KagurazakaNyaa  
       2022-05-14 10:32:21 +08:00
    @AloneHero 那试试 AES ,现在有硬件加速 AES 的速度已经不错了
    webshe11
        4
    webshe11  
       2022-05-14 10:35:34 +08:00
    异或起码搞个密钥,循环异或
    lishoujun
        5
    lishoujun  
       2022-05-14 10:58:19 +08:00
    我看刑。
    带密码压缩一下呢?让客户端解压一下。
    okakuyang
        6
    okakuyang  
       2022-05-14 11:11:41 +08:00
    转 avif 或许就行了
    KagurazakaNyaa
       
    KagurazakaNyaa  
       2022-05-14 11:15:24 +08:00
    其实我建议使用 base64 的一个考虑是,前端本身是支持直接使用 base64 作为图片的 blob 内容的,这样需要的额外处理是最少的
    privapps
        8
    privapps  
       2022-05-14 11:19:44 +08:00
    vvhhaaattt
        9
    vvhhaaattt  
       2022-05-14 11:24:51 +08:00 via Android
    encfs
    vvhhaaattt
        10
    vvhhaaattt  
       2022-05-14 11:25:58 +08:00 via Android
    @vvhhaaattt 没注意到是要网页用的
    zengxs
        11
    zengxs  
       2022-05-14 12:10:04 +08:00
    最不折腾的方案:换个图床,别用网盘
    porrat
        12
    porrat  
       2022-05-14 12:16:42 +08:00
    简单的 XOR 就行,用 AES 也行,现代处理器都支持硬件 AES 速度非常快
    phpfpm
        13
    phpfpm  
       2022-05-14 12:24:29 +08:00   3
    我觉得你这个是伪需求

    网盘就不是给前端用的,你用,就是盗图

    你偷就偷吧,还让别人不知道你存了什么

    太鸡贼了
    Laforet
        14
    Laforet  
      2022-05-14 12:25:47 +08:00 via Android
    Base64
    Laforet
        15
    Laforet  
       2022-05-14 12:27:35 +08:00 via Android
    Base64 再用固定密钥 XOR 最简单,传输过程中有 gzip 的话文件大小其实不会增加多少,客户端开销是绕不开的。如果对性能要求很高那可以自己写一个 decoder 然后把解压放在 js 层面完成,但是感觉有点本末倒置。
    Tanix2
        16
    Tanix2  
       2022-05-14 12:50:00 +08:00
    放到压缩包里加个密码行吗
    nicevar
        17
    nicevar  
       2022-05-14 12:52:38 +08:00
    一个很简单的办法,就是读取前面一部分字节进行简单加密,然后把信息写入尾部,解密的时候再读取出来补上就行了,视频和图片我都这样做过
    KagurazakaNyaa
        18
    KagurazakaNyaa  
       2022-05-14 12:56:16 +08:00
    我的建议是就保存成纯文本的 base64 ,前端不要做任何计算,把它填充到<img src="data:image/png;base64, {base64_data} />里面让浏览器帮你展示
    kirory
        19
    kirory  
       2022-05-14 13:59:19 +08:00
    用一个序列对每一位异或。
    可以简单的使用 0-255 ,还能更改起始的 seed 。
    虽然容易破解,但用在这里足够了
    PeterD
        20
    PeterD  
       2022-05-14 14:09:48 +08:00
    用 BaiduPCS-Py 或 AliPCS-Py ,自动加密上传,再开一个 http server ,自动给你解密。
    xiangyuecn
        21
    xiangyuecn  
       2022-05-14 14:14:19 +08:00   10
    不要当帮凶,他要传黄图
    dingdangnao
        22
    dingdangnao  
       2022-05-14 14:14:39 +08:00
    OSS COS 不行?一定要网盘?
    ttionya
        23
    ttionya  
       2022-05-14 14:16:44 +08:00   1
    正好最近我也有这样的想法,想法比较幼稚,可以参考。

    识别图片等信息是靠前 X bit 和最后 X bit ,我只要在图片前面和后面插入固定长度的随机字符串就行了,然后解密可以直接在前端做,也可以在后端做。

    前端比较简单,可以参考

    ```js
    xhr=new XMLHttpRequest()
    xhr.open('GET', 'https://example.com/a.jpg')
    xhr.respOnseType= 'blob'
    xhr.Onload= function(e) {
    console.log(this.response)
    const newBlob = this.response.slice(64, this.response.size, this.response.type)
    console.log(newBlob)

    document.getElementById('image').src=URL.createObjectURL(newBlob)
    }
    xhr.send()
    ```
    Ultraman
        24
    Ultraman  
       2022-05-14 14:17:23 +08:00 via Android   3
    @xiangyuecn 我劝你少管闲事(狗头.jpg )
    allanpk716
        25
    allanpk716  
       2022-05-14 15:31:24 +08:00 via iPhone
    之前在微博有人做过,思路是直接把图片 N 块切开,上传发微博。然后正确组合的 index 只有你知道,做 js 插件去还原图片。大概是这个思路啊,细节记不住了。
    galenzhao
        26
    galenzhao  
       2022-05-14 15:49:31 +08:00 via iPhone
    encfs
    SunsetShimmer
        27
    SunsetShimmer  
       2022-05-14 17:30:43 +08:00
    有哪个网盘有 API 还允许跨域调用和加载文件的啊。。。?
    (我记得 sharepoint 好像是这样?)
    dingwen07
        28
    dingwen07  
       2022-05-14 18:01:09 +08:00 via iPhone
    CBC 一下
    jim9606
        29
    jim9606  
       2022-05-14 18:12:20 +08:00
    哪家网盘会允许你当图床用甚至还给可以浏览器跨域使用的 api ?
    直接基于二进制流的加密(xor ,aes)要求原图未经有损处理。
    我 i 觉得 @allanpk716 说的那个思路可以,将图片切成 MxN 的块,按一个预先指定的映射打乱块的位置,同时每一个块的 U/V 通道做一个无损变换。呈现时用 js 通过 canvas 恢复。这个方法能抵御缩放但可能抵御不了 JPEG 的 DCT 压缩。
    tutudou
        30
    tutudou  
       2022-05-14 18:43:28 +08:00
    直接把所有的字节+1 即可
    for i in range(len(read_bytes)):
    if read_bytes[i] == 0:
    read_bytes[i] = 255
    else:
    read_bytes[i] = read_bytes[i] - 1
    haah
        31
    haah  
       2022-05-14 18:56:10 +08:00
    网盘为啥要屏蔽图片?
    phpfpm
        32
    phpfpm  
       2022-05-14 19:41:17 +08:00
    @haah 题主要搞皇瑟
    散了吧
    winglight2016
        33
    winglight2016  
       2022-05-14 19:43:13 +08:00
    对抗这种检测 AI 其实挺简单,按一定规则在图片中插值,不但能防 AI 检测,还能用肉眼看不出来图片改变也就是说,你的客户端不需要做任何处理
    AloneHero
        34
    AloneHero  
    OP
       2022-05-14 20:09:24 +08:00 via Android
    @okakuyang 转 avif 不是很稳,网盘可能检测到也可能检测不到,而且一些图片格式转 avif 如果质量系数低转完太糊,质量系数高体积会膨胀,得不偿失。
    @lishoujun 客户端解压还要引入包有点麻烦
    @Tanix2
    @allanpk716 切图思路确实新奇,不过有点隐患,切的太少仍然容易被识别,切的太多客户端网络并发高,容易阻塞
    @SunsetShimmer @jim9606 只是个人用而已,可以在访问官方页面时代理到自己的页面,自己的页面注册上 service worker ,就能实现永久劫持官方页面。
    haah
        35
    haah  
       2022-05-14 21:21:50 +08:00
    1 、Base64 写到页面里;
    2 、颜色分离:透明 /黑白 /彩色。
    haah
        36
    haah  
       2022-05-14 21:25:07 +08:00
    加密涉及到密钥交换问题,你的场景不适用!
    lawler
        37
    lawler  
       2022-05-14 21:36:05 +08:00
    @allanpk716 #25 这是技术方案。非技术的女孩们用三合一上传新浪。哈哈哈哈哈
    Greatshu
        38
    Greatshu  
       2022-05-14 22:11:05 +08:00   2
    图片切成 9 或更多块,打乱重组成一张新图,前端还原
    CharlesGray
        39
    CharlesGray  
       2022-05-14 22:24:13 +08:00
    openssl aes-256-cbc -md sha3-512 -pbkdf2 -iter 114514 -salt -in inputfile -out outputfile
    应该是最安全的加密之一了
    CharlesGray
        40
    CharlesGray  
       2022-05-14 22:24:41 +08:00
    @CharlesGray 而且还不会增长文件体积,加密前后大小一样的,aes 速度也很快
    djyde
        41
    djyde  
       2022-05-14 23:09:33 +08:00
    Aloento
        42
    Aloento  
       2022-05-16 00:16:26 +08:00 via Android
    离谱的需求,建议重新考虑
    tsanie
        43
    tsanie  
       2022-05-16 09:36:50 +08:00
    @AloneHero 不是切成多个碎块文件,是 M*N 切块打乱顺序后重新画到一张图上(这样图片看起来就像马赛克一样),客户端下下来再重新切换还原顺序绘制。
    hatsuyuki
        44
    hatsuyuki  
       2022-05-16 10:41:34 +08:00
    @tsanie 很多漫画网站的 DRM 保护都用的这种方法,切块打乱顺序返回,前端排序后 canvas 绘制
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1582 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:28 PVG 00:28 LAX 09:28 JFK 12:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86