V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jiangwei2222
V2EX  ›  分享创造

开源一个图片加密算法

  •  
  •   jiangwei2222 · 72 天前 · 2684 次点击
    这是一个创建于 72 天前的主题,其中的信息可能已经有所发展或是发生改变。

    GitHub 地址:

    https://github.com/Jinnrry/Jencryption

    特点

    加密前后均为图片格式且加密后图片的尺寸与加密前保持一致。

    目前提供了 golang 版本的 api 以及 js 版本的 sdk

    加密 Demo:

    加密前: befo 加密后: after

    有啥用?

    1 、反扒(比如我前公司,核心资产就是各个景区的高清图片,放出来很容易被扒走)

    2 、盗链 (将自己的私有图片加密后放到公开的 cdn 上,不怕对方知道图片内容,比如使用新浪 cdn 发 1024 [狗头])

    3 、防盗链(图片都加密了,别人盗过去也不知道杂用)

    4 、用于在公开论坛传输一些不符合社会主义核心价值观的图片(比如在 V 站开车[狗头] )

    使用方法:

    1 、使用编译好的二进制文件加解密

    加密当前文件夹内全部图片 Jencryption encrypt [密码]

    加密指定文件夹 /图片 Jencryption encrypt [路径] [密码]

    解密当前文件夹 Jencryption decrypt [密码]

    解密指定文件夹 /图片 Jencryption decrypt [路径] [密码]

    2 、使用 js sdk 在你的网站接入

    <script src="/js/md5.min.js"></script>
    <script src="/js/core.js"></script>
    <script>
    DecryptAllImage("你的密码")  // 解密页面上全部图片
    // DecryptImage(document.getElementById("img"),"你的密码")  // 解密单张图片
    
    </script>
    

    3 、在线加解密工具 https://xjiangwei.cn/Jencryption/

    有谁用?

    目前在我自己的博客( https://www.xjiangwei.cn)文章中已经全部接入图片加密

    目前缺陷

    1 、加密性能不够好,加解密过程有大量 hash 运算。另外加密后图片体积会变大很多

    2 、加密后的图片太丑了

    3 、加密后的图片不能被压缩,一旦图片出现了任何像素点变化就凉凉了

    4 、目前 js sdk 只能处理 img 标签中的图片,css 中的图片不能处理

    28 条回复    2021-09-29 14:29:06 +08:00
    yanzhiling2001
        1
    yanzhiling2001  
       72 天前
    这玩意好,star 了
    yanzhiling2001
        2
    yanzhiling2001  
       72 天前
    性能确实不咋地,缺点不是问题,只要开源了我们给想办法解决。我先看看代码。
    polaa
        3
    polaa  
       72 天前
    简单看了下就是 rgb 的偏移么 emmm
    polaa
        4
    polaa  
       72 天前
    不是很理解为什么不使用现代密码学的算法做加密
    xingheng
        5
    xingheng  
       72 天前
    我不太理解,既然加密之后的结果不是混淆,那么为什么我不直接使用 openssl 把图片当成一个普通文件加解密?
    另一个问题,你的密码在客户端 js 层怎么做混淆的
    gstqc
        6
    gstqc  
       72 天前 via Android   ❤️ 2
    反正你这算法和 psk 都是公开的,不如干脆把图片旋转 180 度,再用 js 旋转回来
    性能好,不增加空间
    AoEiuV020
        7
    AoEiuV020  
       72 天前 via Android
    反正密码要放在前端解密用,那别人爬走批量解密不就好了,
    Kaciras
        8
    Kaciras  
       72 天前   ❤️ 1
    1 、核心资产为什么要放出来。
    3 、直接保存解密后的图片不行么。
    4 、怎么解密,要让用户装插件么。

    唯一有用的就是 2 嫖图床,但是人家会不会压缩优化,压完还能解密吗?
    jiangwei2222
        9
    jiangwei2222  
    OP
       72 天前 via Android
    @polaa 因为没有现成能直接用且提供 jssdk 的,就自己随手写了一个
    whileFalse
        10
    whileFalse  
       72 天前
    你的思路是保证图片加密后仍然是图片,导致加密结果不可压缩,非常大
    那么为什么不换种思路,直接把图片加密成二进制,保障图片的压缩效率呢?
    jiangwei2222
        11
    jiangwei2222  
    OP
       72 天前 via Android
    @xingheng 用在网页端的话 js 首先得混淆,另外你全站密码不能只用一个,你可以服务端动态加密,密码不固定

    另外,客户端场景无论怎么加密仅仅是增加爬取难度而已
    jiangwei2222
        12
    jiangwei2222  
    OP
       72 天前 via Android
    @whileFalse 因为加密成二进制可能很多地方都需要改动,而且很多图床就不行了

    设计这个的初衷就是加密结果也是图片
    whileFalse
        13
    whileFalse  
       72 天前 via iPhone
    @jiangwei2222 但是很多图床都会二次压缩,你试过主流图床了吗
    jiangwei2222
        14
    jiangwei2222  
    OP
       72 天前 via Android
    @yanzhiling2001 其实我最早的想法是要做成二维码那种形式,可以随意压缩,可以通过扫码方式传播。
    jiangwei2222
        15
    jiangwei2222  
    OP
       72 天前 via Android
    @Kaciras 类似大众点评的业务,点评数据就是核心资产,但是也得放出来给人看呀。

    加密仅仅是为了增加爬取成本。

    解密是你程序解密
    xujinkai
        16
    xujinkai  
       72 天前 via Android
    我先声明我没看代码,看楼上说的好像没用现代加密算法。
    我提供一个思路,先用对称算法( AES 或 SM4 )加密二进制流,然后用某种规则编码成为图片。
    这样可以实现加密任何内容,编码规则设计的好还能抗压缩。
    以前搜过一些往图片里隐写数据的软件,挺有意思的。
    zagfai
        17
    zagfai  
       72 天前
    做个身份验证再发送图片数据不就可以了?
    iseki
        19
    iseki  
       72 天前 via Android
    除非你这个算法可以保证压缩后解密可以实现,否则和主流现代密码相比没啥好处,都可以编码成图,都是压一下就坏透了
    zhw2590582
        20
    zhw2590582  
       72 天前
    这种情况,加密后可以不用是图片了,那就可以进一步压缩
    zhw2590582
        21
    zhw2590582  
       72 天前
    而且完全可以用 web worker 解密
    villivateur
        22
    villivateur  
       72 天前 via Android
    如果被压缩了之后,还能解密吗?
    cpstar
        23
    cpstar  
       72 天前
    想到的一些思路不知道对不对啊,不针对 LZ 的算法:
    首先,肯定是对称加密,然后服务器给客户端的是加密内容,客户端解密再给浏览器渲染;
    其次,既然是对称加密,只要密码算法和密钥知道,就可以随意解密;
    最后,密码算法肯定要传给客户端,所以不可能 100%保密,那么能否在密钥上做文章,比如服务器端动态加密以及动态密钥?
    另外,浏览器既然已经渲染了,是否能够控制浏览器不得保存渲染出来的版本?或者在浏览器端屏幕拷贝(截图)能否有方案处置?
    cpstar
        24
    cpstar  
       72 天前
    关于加密算法被客户端破解的可能,能否使用 webassembly 增加破解难度?
    jiangwei2222
        25
    jiangwei2222  
    OP
       72 天前 via Android
    @villivateur 不能


    @cpstar 在客户端使用场景来说,不可能 100%保密
    vazo
        26
    vazo  
       72 天前
    感谢楼分享,思路值得学习,支持一下.
    OOKer
        27
    OOKer  
       70 天前
    好巧,我最近也在研究图像加密。
    这个研究方向应该叫“图像伪造”,已经有很好的加密算法了。
    xieqiqiang00
        28
    xieqiqiang00  
       67 天前
    图片转 jpg 就无效了,看起来被压缩过就不能解密了?
    不是很实用,那不如像上面讲的直接当文件压缩加密算了
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2241 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:39 · PVG 19:39 · LAX 03:39 · JFK 06:39
    ♥ Do have faith in what you're doing.