爱意满满的作品展示区。
AutumnVerse

开源一个图片加密算法

  •  
  •   AutumnVerse · Sep 23, 2021 · 6724 views
    This topic created in 1873 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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


    @cpstar 在客户端使用场景来说,不可能 100%保密
    vazo
    vazo
    Sep 24, 2021
    26
    感谢楼分享,思路值得学习,支持一下.
    OOKer
    OOKer
    Sep 26, 2021
    27
    好巧,我最近也在研究图像加密。
    这个研究方向应该叫“图像伪造”,已经有很好的加密算法了。
    xieqiqiang00
    xieqiqiang00
    Sep 29, 2021
    28
    图片转 jpg 就无效了,看起来被压缩过就不能解密了?
    不是很实用,那不如像上面讲的直接当文件压缩加密算了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4280 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 07:36 · PVG 15:36 · LAX 23:36 · JFK 02:36
    ♥ Do have faith in what you're doing.