AlistGo / alist

🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs. / 一个支持多存储的文件列表/WebDAV程序,使用 Gin 和 Solidjs。
https://alist.nn.ci
GNU Affero General Public License v3.0
43.42k stars 5.63k forks source link

流加密方案,实现电影音乐的安全存放和在线播放 #3846

Closed traceless closed 1 year ago

traceless commented 1 year ago

Please make sure of the following things

Description of the feature / 需求描述

需求

因为阿里云盘和天翼云盘都支持使用alist挂载webdav ,非常的方便在线观看电影,音乐,文件编辑等。但是存放到云盘上的电影、音乐等文件都可能因内容敏感被和谐掉。

解决方案

1、alist的webdav 可以直接上传数据到云盘上,也可以从云盘中下载,流量应该都是会经过alist的。那么能否做一个插件,再上传的时候加密,播放下载的时候自动解密。这样就话客户端就可以正常的播放。

2、关于这个这需求,可以使用流加密方案进行加密。最简单一个加密算法:比如固定一个加密byte 11001100,和流中的每一个字节进行异或运算,解密也一样。当然实际的算法会更复杂一些。go的算法实现我也有一份实现。

其他的方案

1、可以自行实现一个webdav的客户端来进行加密解密,但是这样的话就不通用。其他的webdav客户端就无法正常使用了。

2、可以实现一个webdav代理服务器的方式来解决这个需求,webdav代理服务只要透传请求到alist中即可,只要对上传和下载的流量进行挟持加解密,代码实现也不难,可以根据不同的目录 配置加密需求。

PS: alist本身也有webdav的客户端,如果在它上面套一个加解密其实也很适合,但这样做就显得很挫(虽然实现起来更加容易),所以不如直接在服务端就处理好这块的逻辑。

其他的算法

流加密算法还有RC4、A5/1、ZUC等。但是这个算法主要比较简单,对代码的入侵比较小,直接代理中间流量就能实现加密。算法的复杂和安全并不需要很高,只要云盘不能扫描到就好,总比文件裸跑要强。

Suggested solution / 实现思路

1、算法的实现地址:https://github.com/traceless/flow-encryption

2、有go语言版本和java版本,go语言不是很熟悉,可能还有更优雅的实现。不过思路都大同小异。

3、 至于如何嵌入到你们的webdav服务器中,我不太清楚。因为对alist项目不了解,go语言也是新手。

Additional context / 附件

No response

welcome[bot] commented 1 year ago

Thanks for opening your first issue here! Be sure to follow the issue template!

youtehub commented 1 year ago

这里也推荐一下,前一段时间在discussion中也提过类似的文件加密需求,这样就能躲避网盘和谐文件的问题

traceless commented 1 year ago

这里也推荐一下,前一段时间在discussion中也提过类似的文件加密需求,这样就能躲避网盘和谐文件的问题

我刚去看了代码,alist并不是所有的流量都代理的。网页播放的时候,直接用云盘的视频文件地址。而使用IINA去播放就好像有代理流量。下载文件也是没代理流量的,直接使用云盘地址下载的,感觉这流加密的方案还是不好嵌入到项目中,还是自己撸一个更方便吧。。

bilibili2077 commented 1 year ago

支持,以前小白羊的作者也有一样的想法,上传小白羊客户端加密上传,播放时用小白羊客户端播放器解密播放,他说实现起来很容易,最后因为作者工作的原因没能实现,只有一个洗码上传弄好了,但依然躲不过阿里的河蟹,这功能很多人都盼望!

mengguyi commented 1 year ago

rclone 好像支持上传文件加密,不知道能不能用于webdav

traceless commented 1 year ago

支持,以前小白羊的作者也有一样的想法,上传小白羊客户端加密上传,播放时用小白羊客户端播放器解密播放,他说实现起来很容易,最后因为作者工作的原因没能实现,只有一个洗码上传弄好了,但依然躲不过阿里的河蟹,这功能很多人都盼望!

我想到了一个方案了,把它包一层就好了,目前在alist实现估计会比较麻烦。实现一个webdav代理服务就好了,所有请求先进webdav代理,然后再透传请求到alist就可以了,这样比较容易实现的方案了,回头搞一个跟大家分享下。

rclone 好像支持上传文件加密,不知道能不能用于webdav

rclone 应该是可以,但是不能做到透明的传输,还是有点不方便,比如使用webdav看电影就不行了。

mengguyi commented 1 year ago

其实如果只是想要不让阿里云发现文件是媒体文件只需要对文件前512个字节进行xor 阿里云是靠文件头判定文件类型的

NewbieOrange commented 1 year ago

不如直接aes256gcm,同时对文件名也加密,反正秒传不了了。现代CPU加解密aesgcm的速度都非常快了

traceless commented 1 year ago

不如直接aes256gcm,同时对文件名也加密,反正秒传不了了。现代CPU加解密aesgcm的速度都非常快了

不一样的哦,aes是块加密,一般要等文件全部下载下来才可以解密,你就无法实时去播放视频了。而流解密就可以单独对每个字节加解密,应用场景不一样。

NewbieOrange commented 1 year ago

aesgcm只要按128bit(16byte)对齐就可以解密

yzqiang666 commented 1 year ago

前几个月也考虑过这个问题。现在把敏感资源转移到Pikpak上了。我的想法是在Alist上实现上传时按字节加密,解密可以在alist上实现,为减轻服务器带宽流量最好是302直链到本地,由本地获取直链连接到网盘在线解密。还有一种实现解密是通过cloudflare的workers代理解密。由于本人对Go和javascript的stream操作不熟,一直没去实现。

ENuiOWyTv55o commented 1 year ago

端到端加密规避审查的话用rclone的加密就行了吧,流加密就不知道怎么弄了。

traceless commented 1 year ago

aesgcm只要按128bit(16byte)对齐就可以解密

是的,但是请求的Range: 123133- ,我就不好对齐了, 对业务入侵比较大,所以流加密的开发会简单一些。webdav 也是走http协议的,所以做一个简单http代理服务器就可以了,nodejs或者go 实现很简单,估计百来行代码就可以解决,可以关注一下 https://github.com/traceless/flow-encryption 我这2天搞完上传上去,就可以验证了。

前几个月也考虑过这个问题。现在把敏感资源转移到Pikpak上了。我的想法是在Alist上实现上传时按字节加密,解密可以在alist上实现,为减轻服务器带宽流量最好是302直链到本地,由本地获取直链连接到网盘在线解密。还有一种实现解密是通过cloudflare的workers代理解密。由于本人对Go和javascript的stream操作不熟,一直没去实现。

是的,你提供cloudflare是一个不错的方案,如果价格不贵的话,可以考虑。不过我更加推荐你是去实现一个http代理服务器,任何语言都很轻松实现,可以关注下我那个项目,我把nodejs版本的代理服务器 实现上去,估计也就是百行代码左右,很容易看懂。

端到端加密规避审查的话用rclone的加密就行了吧,流加密就不知道怎么弄了。

可以看看我的那个实现算法,比较简单,可以参考下。

mengguyi commented 1 year ago

如果想要能302的话可以用wasm在前端播放器里加一个解密的功能 上传走alist加密 这样看视频就不用走alist的代理

66508393 commented 1 year ago

我现在已经是 rclone加密+alist+阿里云+emby 香得很! tg+pikpak 下片子 aria2下载 本地削刮后 rclone 加密 alist 上传

vicdorke commented 1 year ago

我现在已经是 rclone加密+alist+阿里云+emby 香得很!

那怎么解密呢

66508393 commented 1 year ago

image

vicdorke commented 1 year ago

image

这是rclone?支持流媒体吗

traceless commented 1 year ago

我现在已经是 rclone加密+alist+阿里云+emby 香得很!

那怎么解密呢

rclone 方案不行,应该占用本地磁盘的,还是webdav代理的方案最合适,中间对流量进行加解密。

66508393 commented 1 year ago

rclone 方案 上传前的加密是要占用本地磁盘做为缓存 解密挂载是不占磁盘的。

66508393 commented 1 year ago

image

这是rclone?支持流媒体吗

都可以的

66508393 commented 1 year ago

如果 alist可以直接加密就最理想了,不用rclone做中间加密了!

66508393 commented 1 year ago

image image

alist 解密在线看。香 吗?

bilibili2077 commented 1 year ago

本质上是要规避阿里的审查,阿里现在视频图片都用AI抽帧检查,以前用修改md5都没用了

66508393 commented 1 year ago

本质上是要规避阿里的审查,阿里现在视频图片都用AI抽帧检查,以前用修改md5都没用了

是的,没密钥,神仙也查不到 别说什么md5 ai的 连文件名也是加密的

traceless commented 1 year ago

本质上是要规避阿里的审查,阿里现在视频图片都用AI抽帧检查,以前用修改md5都没用了

是的,所以不需要太复杂的加密,有一个简单的加密就可以了。我可以关注一下我的那个项目git,我今晚会上传一个demo,目前测试差不多了,还差一个302 要调整下。代理服务器直接代理所有的流量,直接加解密。

如果想要能302的话可以用wasm在前端播放器里加一个解密的功能 上传走alist加密 这样看视频就不用走alist的代理

alist确实直接跳转302下载或者播放的,但是alist的跳转到那个 IINA就是自己代理下载播放的,所以问题不大,曲线救国,直接不用网页看就好了。我的代理服务器也可以解决302跳转的问题。代码晚上上传,目前验证了差不多了,就是剩下这个302的问题。如果下载文件的话,还是要经过代理服务器才能解密。

bilibili2077 commented 1 year ago

本质上是要规避阿里的审查,阿里现在视频图片都用AI抽帧检查,以前用修改md5都没用了

是的,没密钥,神仙也查不到 别说什么md5 ai的 连文件名也是加密的

本质上是要规避阿里的审查,阿里现在视频图片都用AI抽帧检查,以前用修改md5都没用了

是的,所以不需要太复杂的加密,有一个简单的加密就可以了。我可以关注一下我的那个项目git,我今晚会上传一个demo,目前测试差不多了,还差一个302 要调整下。代理服务器直接代理所有的流量,直接加解密。

如果想要能302的话可以用wasm在前端播放器里加一个解密的功能 上传走alist加密 这样看视频就不用走alist的代理

alist确实直接跳转302下载或者播放的,但是alist的跳转到那个 IINA就是自己代理下载播放的,所以问题不大,曲线救国,直接不用网页看就好了。我的代理服务器也可以解决302跳转的问题。代码晚上上传,目前验证了差不多了,就是剩下这个302的问题。如果下载文件的话,还是要经过代理服务器才能解密。

好的,很期待,希望有个详细的教程!

vicdorke commented 1 year ago

2下载或者播放的,但是alist的跳转到那个 IINA就是自己代理下载播放的,所以问题不大,曲线救国,直接不用网页看就好了。我的代理服务器也可以解决302跳转的问题。代码晚上上传,目前验证了差不多了,就是剩下这个302的问题。如果下载文件的话,还是要经过代理

出一个教程呀

Ben-Huang commented 1 year ago

传前的加密是要占用本地磁盘做为缓存 解密挂载是不占磁盘的。

可以详细说说你的方案吗?具体怎么操作?

traceless commented 1 year ago

2下载或者播放的,但是alist的跳转到那个 IINA就是自己代理下载播放的,所以问题不大,曲线救国,直接不用网页看就好了。我的代理服务器也可以解决302跳转的问题。代码晚上上传,目前验证了差不多了,就是剩下这个302的问题。如果下载文件的话,还是要经过代理

出一个教程呀

@bilibili2077 @66508393 @mengguyi @NewbieOrange @youtehub 代码上传了,https://github.com/traceless/flow-encryption 代码很简单不到100行(nodejs提供的http太强了,其他语言难搞),只是做了很基础的现实,已经验证了阿里云的可行性和测试通过。后续就是在这基础上做一些配置界面,更细腻度的适配,包括alist的一些其他的接口代理下来。

mengguyi commented 1 year ago

看到了,很棒,给https://github.com/traceless/flow-encryption 了一个star

ilihu commented 1 year ago

建议alist插件化,这东西适合以插件的模式加进来

bilibili2077 commented 1 year ago

2下载或者播放的,但是alist的跳转到那个 IINA就是自己代理下载播放的,所以问题不大,曲线救国,直接不用网页看就好了。我的代理服务器也可以解决302跳转的问题。代码晚上上传,目前验证了差不多了,就是剩下这个302的问题。如果下载文件的话,还是要经过代理

出一个教程呀

@bilibili2077 @66508393 @mengguyi @NewbieOrange @youtehub 代码上传了,https://github.com/traceless/flow-encryption 代码很简单不到100行(nodejs提供的http太强了,其他语言难搞),只是做了很基础的现实,已经验证了阿里云的可行性和测试通过。后续就是在这基础上做一些配置界面,更细腻度的适配,包括alist的一些其他的接口代理下来。

小白不知道怎么用啊!

traceless commented 1 year ago

建议alist插件化,这东西适合以插件的模式加进来

嗯,但是alist要实现这一套动作有点大,一时半会也难整理出来。我那个代理服务已经写的基本可用了: 1、支持多个webdav 2、支持多路径配置是否加密 3、支持alist页面跳转到IINA观看加密视频,其他播放器应该一样,局域网webdav内看视频也一样支持。 4、支持alist下载加密文件,下载后是正常使用的文件。

测试使用的是阿里云盘,其他的还没来得及测试。

traceless commented 1 year ago

回头打包到docker上,先不着急啊,这个周末在完善一下。测试几个网盘先,目前使用还不错😄。使用透明无感。

66508393 commented 1 year ago

回头打包到docker上,先不着急啊,这个周末在完善一下。测试几个网盘先,目前使用还不错😄。使用透明无感。

good,期待!!

youtehub commented 1 year ago

@traceless 你看看,后期测试好后,问问项目管理人员,能否集成到 alist 项目中去,就是 如图片中的那样,所有人都能用,主要是后面有迭代升级的话,好继续维护 image

traceless commented 1 year ago

@traceless 你看看,后期测试好后,问问项目管理人员,能否集成到 alist 项目中去,就是 如图片中的那样,所有人都能用,主要是后面有迭代升级的话,好继续维护 image

他那个项目alit-proxy 好像还不太一样,我刚才发现名字跟他们重复了,我还是换了一个名字,https://github.com/traceless/alist-encrypt 已经打包到docker仓库中了,可以体验一下哦。

@bilibili2077 @66508393 @mengguyi @NewbieOrange @youtehub 已经打包到docker仓库了,可以体验下。使用说明在新的代码仓库/alist-encrypt ,还有一些功能没完善,基本可用,支持在网页端播放加密的视频,查看已加密的图片等。

laopaoer-wallet commented 1 year ago

@traceless 大哥 啥时候才支持测试啊..

traceless commented 1 year ago

@traceless 大哥 啥时候才支持测试啊..

应该是可以了的啊 ,https://github.com/traceless/alist-encrypt 已经打包到docker仓库中了,我记得测试可以正常使用的哦。你那边不能正常使用吗?

laopaoer-wallet commented 1 year ago

@traceless 大哥 啥时候才支持测试啊..

应该是可以了的啊 ,https://github.com/traceless/alist-encrypt 已经打包到docker仓库中了,我记得测试可以正常使用的哦。你那边不能正常使用吗?

关键我是小白,,不知道如何配合alist使用

laopaoer-wallet commented 1 year ago

image

laopaoer-wallet commented 1 year ago

image 不支持ARM???

traceless commented 1 year ago

image 不支持ARM???

😄 是啊,我还没打包arm版本的docker 上去。。。我晚点push 一下哈,你可以用pc电脑先试试。我这个项目配置很简单的,应该看的懂,这周末我再提交一个界面配置,还有出一个视频教程哈,到时候通知你

laopaoer-wallet commented 1 year ago

@traceless 感谢大佬 666666

bilibili2077 commented 1 year ago

image 不支持ARM???

😄 是啊,我还没打包arm版本的docker 上去。。。我晚点push 一下哈,你可以用pc电脑先试试。我这个项目配置很简单的,应该看的懂,这周末我再提交一个界面配置,还有出一个视频教程哈,到时候通知你

好的大佬,小白看不懂,所以一直没配置好,等大佬的界面UI!

laopaoer-wallet commented 1 year ago

@traceless 我尊敬的好大哥,,,arm Push了吗??? 教程好了吗?? 我很急啊 ..哈哈 还望大哥见谅

traceless commented 1 year ago

@traceless 我尊敬的好大哥,,,arm Push了吗??? 教程好了吗?? 我很急啊 ..哈哈 还望大哥见谅

arm版本的docker,明天我再搞一下哈,界面做好了,晚点我发个操作视频 到B站去。@bilibili2077 现在有这个界面可以操作了,简单测试下,稳。

bilibili2077 commented 1 year ago

@traceless 我尊敬的好大哥,,,arm Push了吗??? 教程好了吗?? 我很急啊 ..哈哈 还望大哥见谅

arm版本的docker,明天我再搞一下哈,界面做好了,晚点我发个操作视频 到B站去。@bilibili2077 现在有这个界面可以操作了,简单测试下,稳。

好的大佬,你的B站ID是什么?我关注下!

traceless commented 1 year ago

@traceless 我尊敬的好大哥,,,arm Push了吗??? 教程好了吗?? 我很急啊 ..哈哈 还望大哥见谅

arm版本的docker,明天我再搞一下哈,界面做好了,晚点我发个操作视频 到B站去。@bilibili2077 现在有这个界面可以操作了,简单测试下,稳。

好的大佬,你的B站ID是什么?我关注下!

叫 小巫老师,你搜索下,最近一个视频 讲 vscode 的穿透