开源一个图片加密算法

2021-09-23 21:41:02 +08:00
 jiangwei2222

GitHub 地址:

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 中的图片不能处理

5156 次点击
所在节点    分享创造
28 条回复
yanzhiling2001
2021-09-23 21:48:30 +08:00
这玩意好,star 了
yanzhiling2001
2021-09-23 21:51:57 +08:00
性能确实不咋地,缺点不是问题,只要开源了我们给想办法解决。我先看看代码。
polaa
2021-09-23 21:52:16 +08:00
简单看了下就是 rgb 的偏移么 emmm
polaa
2021-09-23 21:56:19 +08:00
不是很理解为什么不使用现代密码学的算法做加密
xingheng
2021-09-23 21:58:48 +08:00
我不太理解,既然加密之后的结果不是混淆,那么为什么我不直接使用 openssl 把图片当成一个普通文件加解密?
另一个问题,你的密码在客户端 js 层怎么做混淆的
gstqc
2021-09-23 22:03:35 +08:00
反正你这算法和 psk 都是公开的,不如干脆把图片旋转 180 度,再用 js 旋转回来
性能好,不增加空间
AoEiuV020
2021-09-23 22:24:49 +08:00
反正密码要放在前端解密用,那别人爬走批量解密不就好了,
Kaciras
2021-09-23 22:39:08 +08:00
1 、核心资产为什么要放出来。
3 、直接保存解密后的图片不行么。
4 、怎么解密,要让用户装插件么。

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

另外,客户端场景无论怎么加密仅仅是增加爬取难度而已
jiangwei2222
2021-09-23 22:47:41 +08:00
@whileFalse 因为加密成二进制可能很多地方都需要改动,而且很多图床就不行了

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

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

解密是你程序解密
xujinkai
2021-09-23 23:35:24 +08:00
我先声明我没看代码,看楼上说的好像没用现代加密算法。
我提供一个思路,先用对称算法( AES 或 SM4 )加密二进制流,然后用某种规则编码成为图片。
这样可以实现加密任何内容,编码规则设计的好还能抗压缩。
以前搜过一些往图片里隐写数据的软件,挺有意思的。
zagfai
2021-09-24 00:55:46 +08:00
做个身份验证再发送图片数据不就可以了?
Perry
2021-09-24 04:42:53 +08:00
iseki
2021-09-24 06:21:33 +08:00
除非你这个算法可以保证压缩后解密可以实现,否则和主流现代密码相比没啥好处,都可以编码成图,都是压一下就坏透了
zhw2590582
2021-09-24 08:17:45 +08:00
这种情况,加密后可以不用是图片了,那就可以进一步压缩

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/803754

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX