traceless / alist-encrypt Goto Github PK
View Code? Open in Web Editor NEW这个项目主要是对 alist 的服务进行代理,提供 webdav 的加解密功能。支持 alist 网页在线播放加密的视频,查看加密的图片等功能,同时在 webdav 下的操作透明,自动实现文件资源的加解密。
这个项目主要是对 alist 的服务进行代理,提供 webdav 的加解密功能。支持 alist 网页在线播放加密的视频,查看加密的图片等功能,同时在 webdav 下的操作透明,自动实现文件资源的加解密。
decodeName in ommonUtils.js is not working properly.
e.g file name=IMG_3191.heic due to the "_", it will goto decodeFolderName, then call decodeName.
i tested 10000+ files, few files have issue in that function, below is one example of returned { folderEncType, folderPasswd }:
{ folderEncType: '', folderPasswd: 'J�\x00�w' }
分享一个vscode+ahk的开发小技巧,可以快速迭代模块。
这个项目下载下来后,只要node就可以跑起来,(预先打开alist)进入 node-proxy 文件夹,运行 `npm i --omit=dev` `npm run serve`,马上就能跑起来。
我知道node,webpack有一种开发方式可以监听文件变化,保存后立即自动编译并热更新。不知道这个项目有没有,可能是 dev 指令,但没有下载完整依赖,运行不起来。
实际上可以用 vscode+ahk 加速,速度也很快。
原理:vscode 打开项目文件夹,编辑/修改后,点击某快捷键,之后由ahk接管,自动保存、自动重启serve进程。
以下代码:
app.js 修改标题便于检测:
```
process.title = "Alist-Encrypt.js";
```
ahk 绑定 f1 热键:
```
F1::
WinGetTitle,Title, A
if(InStr(Title, "alist-encrypt"))
{
if(InStr(Title, "●")) {
send, ^{s}
}
WinGet, WindowPID, PID, Alist-Encrypt.js
if (WindowPID) {
RunWait, TaskKill /PID %WindowPID% /F, , Hide
}
sleep, 100
WinGet, WindowPID, PID, Alist-Encrypt.js
if (WindowPID) {
RunWait, TaskKill /PID %WindowPID% /F, , Hide
}
Run, D:\software\alist-windows-amd64\start.bat
; start.bat 里面 cd 至 encrypt/node-proxy, 然后 npm serve.
}
return
```
android端solidexplorer和windows端winscp都有这个问题,网页端正常,网盘是quark网盘。
没有缩略图不太方便
希望通过更安全的方式存储密码,比如运行时config.js读取环境变量ALIST_ENC_PASSWORD作为密码?
感觉可以只针对alist 的/dav 路径的webdav接口做加解密就行了,可以少很多适配不同网盘的工作量。
方便修改
这个大概只是个待办事项 有空就搞搞吧
#4 感觉这个很重要啊,可不可以设置这个加解密密码在运行时人工输入或者像上面这个issue提出的读取环境变量。不然密码明文存在硬盘上这个加密对于本地存储的文件就很鸡肋了。
我用这个的初衷是因为自己的webdev是搭建在自己的vps上的,但我没办法防止运营商查看我存在硬盘上的文件,所以需要进行加密。
您好,前几天fork了项目 试了下 目前如果不牵涉文件名加密的话一切正常. 开启文件名加密后,使用其他webdav挂载aliyundrive即:https://github.com/messense/aliyundrive-webdav 挂载后加密文件夹无法正常访问.其他webdav客户端正常. 另外rclone无法正常上传,使用curl上传正常.
请求添加自定义后缀名的功能.即:在配置文件里自定义后缀名的映射比如.xyz对应.mp4.这样可玩性更高😄.
感谢提供这么好的项目.
目前测试发现一个问题,解密的速度比较慢,也受限于服务器带宽。是否可以考虑解密直接在客户端做,客户端直接调用对应网盘的能力,拿到数据之后,再进行解密。这样可以把数据传输放在客户端,而不会都放在服务器。
你好,我在 istoreOS 里使用docker按照介绍配置,在win使用RaiDrives挂载alist转化的webdav。
使用这个服务后,向加密文件夹复制文件时会提示文件不存在,然后云盘创建自动创建一个0kb同名文件,需要删除该文件重新上传才能正常加解密,阿里云盘和123云盘同样的效果,向未设置加密文件夹复制文件时一切正常,完全不清楚哪里的问题。
你好,测试发现:网页对加密的文件进行重命名,如果新的文件名过长,可以正常加密,但是解密失败,呈现的文件名前面多了org,并且中间存在空格,导致重命名失败。
大佬方便问下文件转存功能啥时候上线嘛?感谢大佬
加密之后,阿里云盘里的视频加载比较慢,不知道是不是部署在vps上的缘故,直接使用alist播放阿里云盘,加载速度比较快,套上这个加密之后视频加载速度慢了一些,而且用potplayer播放,有时还会报错。不知道部署在本地会不会好一些,
1.Alist使用官方脚本进行一键安装
2.Alist-encrypt使用Docker进行安装
在配置完成后。自动加密上传以及下载均可以正常使用。但是Alist中存在着复制功能。可以直接将Dav中的文件复制到另外一个文件夹中。但是使用这个复制功能的话。Alist-encrypt将不会自动加密复制过去的文件。
背景是这样,有的电影发现无法通过rclone挂载alist的webdav上传天翼,尝试用alist-encrypt仍无法上传,提示405,但是用alist-encrypt在本地加密后再上传就没有问题,挺奇怪的;
还有本地加密的小文件会直接在目的路径生成加密文件,但是大一点的视频文件会在文件夹
目录下生成.temp
文件,且只在.temp目录下生成一个2g的文件,不知道是不是加密失败了,还是限制了大小
希望增加文件夹名加密选项
你好,目前是否支持百度网盘?后续有计划将百度网盘加到计划里面吗?
这样可以直接建立一个不需要访问者自行部项目署的网站,且相比目前的服务器解密,不受限于服务器带宽和服务器性能。可在网盘302模式的情况下也能加密解密数据,减少访问成本和流量成本。
下载的文件内容是解密的
aList 3.16.3
根据文件夹内是否有特定文件决定是否加密
例如:
文件夹内有 .alist-encrypt,则加密,文件内容可以为加密方式
文件夹内有 .alist-encrypt-ignore,则不加密
特定文件名可由后台配置
能否支持foldersync的webdav HTTPS,将整个文件夹加密备份至云盘
搭了半天,尝试了下别人3.12.2的alist才成功,猜测不支持最新版3.19.0的alist
测试了一个大文件
800mb的MP4,不算太大,挂载本机存储。本地浏览器播放是秒出的。
然而局域网(wifi)就需要缓存 8 秒,同样环境下,原5244只需缓存 2 秒。
挂载云盘也要缓存5~8秒。
是加密方式太复杂,还是需要处理的数据量大?
导致问题的代码:
alist-encrypt/node-proxy/app.js
Lines 239 to 241 in dfba560
如果 ctx.req.selfHost
我们配置的是 docker service 的名字,如下 ALIST_HOST: alist:5244
version: '3.3'
services:
alist:
image: 'xhofe/alist:latest'
restart: always
volumes:
- '/etc/alist:/opt/alist/data'
ports:
- '5244:5244'
environment:
- PUID=0
- PGID=0
- UMASK=022
container_name: alist
alist-encrypt:
image: prophet310/alist-encrypt:beta
restart: unless-stopped
container_name: alist-encrypt
volumes:
- ./alist-encrypt:/node-proxy/conf
environment:
TZ: Asia/Shanghai
ALIST_HOST: alist:5244 # 建议加个设置项,类似这样
ports:
- '5344:5344'
就会导致在预处理非加密文件的展示的时候,网址被替换为
很容易注意到我们这浏览器中,用到了仅仅可以在 docker 网络中用的 hostname。这会导致我们的浏览器无法正确显示。
作者的目的是在相应非加密数据的时候,尽量不代理,走原 alist。但是意外导致了这个问题。
目前登录密码是默认123456,是否可以设置成配置项?类似拉取docker下来,要改密码会比较麻烦。
即使是未加密的路径间移动文件也会报错
目前好像只能对文件名进行加密,但是如果有多层目录,如果目录名不加密,别人一看也可以猜出来是什么东西。是否可以考虑文件夹名加密?谢谢。
我是通过podman部署的,alist监听5244,通过本项目代理,监听5344
Linux上通过davfs挂载5344到目录,目录访问正常,但是上传会失败,表现是,上传后马上ls可以看到文件,稍后再ls就看不到了,应该是上传失败了。无论是否是加密目录都是如此。
davfs2项目地址https://savannah.nongnu.org/projects/davfs2
附上podman logs -f
日志
@@request_info: a1f42f7a-6297-4c54-9a48-7a423b1b1bc3 PROPFIND http://192.168.6.175:5244/dav/ {
'user-agent': 'davfs2/1.7.0 neon/0.31.2',
connection: 'TE',
te: 'trailers',
host: '192.168.6.175:5244',
depth: '1',
'content-length': '257',
'content-type': 'application/xml',
authorization: 'Basic YWrhtrhRtaW46Qkp88rhtrthDM3'
} false false
@@statusCode a1f42f7a-6297-4c54-9a48-7a423b1b1bc3 207 {
'content-type': 'text/xml; charset=utf-8',
date: 'Thu, 07 Mar 2024 03:59:34 GMT',
'transfer-encoding': 'chunked'
}
响应关闭... a1f42f7a-6297-4c54-9a48-7a423b1b1bc3 http://192.168.6.175:5244/dav/
响应关闭... a1f42f7a-6297-4c54-9a48-7a423b1b1bc3 /dav/
@@decodeURI(fileName) NUC11
@@request_client: PROPFIND http://192.168.6.175:5244/dav/NUC11/ {
'user-agent': 'davfs2/1.7.0 neon/0.31.2',
connection: 'TE',
te: 'trailers',
host: '192.168.6.175:5244',
depth: '1',
'content-length': '257',
'content-type': 'application/xml',
authorization: 'Basic YWrhtrhRtaW46Qkp88rhtrthDM3'
}
@@statusCode 207 {
'content-type': 'text/xml; charset=utf-8',
date: 'Thu, 07 Mar 2024 03:59:34 GMT',
'content-length': '1048'
}
httpResp响应结束... /dav/NUC11/
@@request_info: 49e22f1b-5c06-433c-bc1f-3e3481ece411 LOCK http://192.168.6.175:5244/dav/NUC11/python362.chm {
'user-agent': 'davfs2/1.7.0 neon/0.31.2',
connection: 'TE',
te: 'trailers',
host: '192.168.6.175:5244',
'content-length': '162',
'content-type': 'application/xml',
depth: '0',
timeout: 'Second-1800',
authorization: 'Basic YWrhtrhRtaW46Qkp88rhtrthDM3'
} false false
@@statusCode 49e22f1b-5c06-433c-bc1f-3e3481ece411 200 {
'content-type': 'application/xml; charset=utf-8',
'lock-token': '<1709710985>',
date: 'Thu, 07 Mar 2024 03:59:34 GMT',
'content-length': '420'
}
响应关闭... 49e22f1b-5c06-433c-bc1f-3e3481ece411 http://192.168.6.175:5244/dav/NUC11/python362.chm
响应关闭... 49e22f1b-5c06-433c-bc1f-3e3481ece411 /dav/NUC11/python362.chm
同时,通过davfs挂载alist是没问题的,上传功能正常
alist-encrypt的web端上传也正常,加密也没问题。目前仅发现上述问题
Alist v3.33.0 上传文件会加密 打开不会解密 直接返回加密内容了
感觉可以增加新功能,
1:加密文件名的时候,连拓展名一起加密。
2:加密文件夹名
例如:本地加密 D:\a ,输出到:F:\b ,这样会报错
我修改了:node-proxy/src/utils/convertFile.js:47
把 encPath 改成了 outPath ,然后运行没有报错
测试:将文件(视频、图片)从本地存储(未加密的文件夹)复制到天翼云盘(加密的文件夹)。
将文件从未加密的存储复制到加密的存储,文件无法在线浏览,而官方客户端可以正常在线浏览。
背景:debian10 、 alist v3.33.0 、docker pull prophet310/alist-encrypt:beta
操作步骤:安装alist-encrypt之前,专门给alist一个域名;安装alist-encrypt之后,另装了个域名给alist-encrypt访问alist的入口;
现象:
本地、阿里云、天翼云盘、onedrive 在线播放加密视频失败;表现为自动重新连接5次后,显示“加载失败”
onedrive 在线查看加密的txt失败:表现为Failed to fetch xxxurl AxiosError: Network Error
有些文件名有点敏感,容易被审查,比如天翼云盘就会审查文件名。
我倒是学艺不精,但是还是有的想说说自己知道的点❤️((
因为对称加密是块加密
当前项目已添加RC4算法,安全性基本是无可挑剔了
RC4早就爆出不安全了😥…
2015 年 2 月发布的 RFC 7465 禁止在 TLS 中使用 RC4。
虽然对于这样的项目说,我觉得能某种意义上混淆明文就已经能达到目的了,但是还是可以采用更安全的算法😘
就这点的话,安全性来说ChaCha20-Poly1305可能更好,当然AES和chacha20是可以互换的
另外对于极致安全性来说,不要自己实现算法(我说的不是RC4,而是之前的mix混淆prototype,当然实现算法也是蛮有意思的嘛,“设计这个项目的初衷本身就是为了躲避云盘的扫描的”,我也很赞同这一点😄,我之前甚至想过直接把整个文件头部一段字节加密就行了,能抵御大部分扫描),而是参照已有实现会比较好,而且要了解如何正确实现(比如AES的ECB绝对不能用,CBC使用padding不当会有点问题)…
对称加密不方便分享密匙给对方
我没有看RC4是怎么实现的,但是感觉可以另外存密钥或者用文件名派生密钥来解决这个问题?
当然还是很感谢你有时间来维护和创造这个项目❤️
Chrome错误:net:ERR_ CONTENT DECODING_ FAILED
我想将rclone的加密功能转到这个项目,对于那些被rclone加密的项目,我是否可以直接通过alist-encrypt加解密呢?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.