https://github.com/Jinnrry/Jencryption
加密前后均为图片格式且加密后图片的尺寸与加密前保持一致。
目前提供了 golang 版本的 api 以及 js 版本的 sdk
加密 Demo:
加密前: 加密后:
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 中的图片不能处理
1
40EaE5uJO3Xt1VVa 2021-09-23 21:48:30 +08:00
这玩意好,star 了
|
2
40EaE5uJO3Xt1VVa 2021-09-23 21:51:57 +08:00
性能确实不咋地,缺点不是问题,只要开源了我们给想办法解决。我先看看代码。
|
3
polaa 2021-09-23 21:52:16 +08:00
简单看了下就是 rgb 的偏移么 emmm
|
4
polaa 2021-09-23 21:56:19 +08:00
不是很理解为什么不使用现代密码学的算法做加密
|
5
xingheng 2021-09-23 21:58:48 +08:00
我不太理解,既然加密之后的结果不是混淆,那么为什么我不直接使用 openssl 把图片当成一个普通文件加解密?
另一个问题,你的密码在客户端 js 层怎么做混淆的 |
6
0ZXYDDu796nVCFxq 2021-09-23 22:03:35 +08:00 via Android 2
反正你这算法和 psk 都是公开的,不如干脆把图片旋转 180 度,再用 js 旋转回来
性能好,不增加空间 |
7
AoEiuV020 2021-09-23 22:24:49 +08:00 via Android
反正密码要放在前端解密用,那别人爬走批量解密不就好了,
|
8
Kaciras 2021-09-23 22:39:08 +08:00 1
1 、核心资产为什么要放出来。
3 、直接保存解密后的图片不行么。 4 、怎么解密,要让用户装插件么。 唯一有用的就是 2 嫖图床,但是人家会不会压缩优化,压完还能解密吗? |
9
jiangwei2222 OP @polaa 因为没有现成能直接用且提供 jssdk 的,就自己随手写了一个
|
10
whileFalse 2021-09-23 22:45:10 +08:00
你的思路是保证图片加密后仍然是图片,导致加密结果不可压缩,非常大
那么为什么不换种思路,直接把图片加密成二进制,保障图片的压缩效率呢? |
11
jiangwei2222 OP |
12
jiangwei2222 OP |
13
whileFalse 2021-09-23 22:49:35 +08:00 via iPhone
@jiangwei2222 但是很多图床都会二次压缩,你试过主流图床了吗
|
14
jiangwei2222 OP @yanzhiling2001 其实我最早的想法是要做成二维码那种形式,可以随意压缩,可以通过扫码方式传播。
|
15
jiangwei2222 OP |
16
xujinkai 2021-09-23 23:35:24 +08:00 via Android
我先声明我没看代码,看楼上说的好像没用现代加密算法。
我提供一个思路,先用对称算法( AES 或 SM4 )加密二进制流,然后用某种规则编码成为图片。 这样可以实现加密任何内容,编码规则设计的好还能抗压缩。 以前搜过一些往图片里隐写数据的软件,挺有意思的。 |
17
zagfai 2021-09-24 00:55:46 +08:00
做个身份验证再发送图片数据不就可以了?
|
18
Perry 2021-09-24 04:42:53 +08:00
|
19
iseki 2021-09-24 06:21:33 +08:00 via Android
除非你这个算法可以保证压缩后解密可以实现,否则和主流现代密码相比没啥好处,都可以编码成图,都是压一下就坏透了
|
20
zhw2590582 2021-09-24 08:17:45 +08:00
这种情况,加密后可以不用是图片了,那就可以进一步压缩
|
21
zhw2590582 2021-09-24 08:18:43 +08:00
而且完全可以用 web worker 解密
|
22
villivateur 2021-09-24 08:36:34 +08:00 via Android
如果被压缩了之后,还能解密吗?
|
23
cpstar 2021-09-24 09:34:10 +08:00
想到的一些思路不知道对不对啊,不针对 LZ 的算法:
首先,肯定是对称加密,然后服务器给客户端的是加密内容,客户端解密再给浏览器渲染; 其次,既然是对称加密,只要密码算法和密钥知道,就可以随意解密; 最后,密码算法肯定要传给客户端,所以不可能 100%保密,那么能否在密钥上做文章,比如服务器端动态加密以及动态密钥? 另外,浏览器既然已经渲染了,是否能够控制浏览器不得保存渲染出来的版本?或者在浏览器端屏幕拷贝(截图)能否有方案处置? |
24
cpstar 2021-09-24 09:36:28 +08:00
关于加密算法被客户端破解的可能,能否使用 webassembly 增加破解难度?
|
25
jiangwei2222 OP |
26
vazo 2021-09-24 17:41:37 +08:00
感谢楼分享,思路值得学习,支持一下.
|
27
OOKer 2021-09-26 13:01:27 +08:00
好巧,我最近也在研究图像加密。
这个研究方向应该叫“图像伪造”,已经有很好的加密算法了。 |
28
xieqiqiang00 2021-09-29 14:29:06 +08:00
图片转 jpg 就无效了,看起来被压缩过就不能解密了?
不是很实用,那不如像上面讲的直接当文件压缩加密算了 |