MixFile介绍
MixFile是一款可以上传加密文件并分享的安卓APP
可实现本地加密上传,加密下载文件,在线播放加密视频
加密时会自动生成随机密钥进行加密,上传完成后,密钥 文件地址 文件大小等信息会附加在分享码中
将分享码发送给他人即可实现分享文件
局域网内只要一台设备安装了此软件,其他设备均可通过网页端,上传/下载/播放加密文件
已发布版本: https://github.com/InvertGeek/MixFile/releases
局域网服务器
MixFile启动时会自动运行文件服务器,用于代理加密解密上传下载的流量,可实现同一局域网设备中直接下载上传加密文件
在同一局域网的设备访问文件服务器地址即可直接访问MixFile网页版
可通过局域网服务器直接上传下载文件,另外提供http api
/api/upload?name=文件名 使用put请求即可上传文件,成功后会返回分享码(长分享码格式)
/api/download?s=分享码 可直接下载或预览文件
如果默认播放器功能不够多,或者需要同时下载多个文件,以及文件管理等功能
可直接复制文件的局域网地址到任何浏览器中播放/下载
可在桌面长按app图标在后台启动局域网服务器
给予自启动权限后,即可让局域网服务器自动运行
局域网服务器如果无响应请尝试重启APP
注意
请到手机的应用设置中关闭本应用的省电限制,以及允许通知权限,否则局域网服务器无法在后台运行
推荐使用安卓10以上运行本APP,旧版本可能出现无法下载文件的问题
原理
上传文件之前会在本地使用aes-gcm-256算法使用随机密钥加密后再上传,
注意: 所有的文件都是以图片的方式上传的,例如100MB的文件,会自动按照1mb大小分割成100份
每份文件单独使用aes加密后隐藏封装到一张空白图片中,所有文件上传完毕后,获得100个地址url
最后再把这100个地址url的数据使用gzip压缩aes加密后
封装到一张图片中作为索引,1mb索引大概能储存20G文件信息的url
下载时会根据索引解析,视频播放时会智能识别对应进度条的索引文件解析后返回给客户端
上传完成后,本次加密使用的随机密钥会携带在分享码中(分享码默认使用不可见字符附加信息)
解密时同理,只要不泄漏分享码,即使是储存文件的服务器也无法知晓你储存的文件内容
限制与性能
图片分片大小默认为1024kb(1mb)
下载和上传时是多个任务进行并发上传与下载,如果增加分片大小,例如1mb增加为2mb,
那么并发数量会动态计算为二分之一,防止占用过高,例如2mb的分片,上传下载并发配置为10,实际会使用5作为并发数量
1mb索引文件大约能储存1.5w-2w条分片信息,也就是大约能储存15g-20g的文件,改为2mb后,限制即可翻倍
假设图床限制为5mb,分片大小为1mb,那么最大文件大小限制大约就为100g,改为2mb后,即可上传200g左右的文件
不过增加分片大小会导致上传失败概率增加,上传速度降低,上传下载占用增加,所以如果不是储存大文件,不建议修改
安全性
文件是在本地加密后上传的,不泄漏分享码任何人无法解密
MixFile采用256位的AES-GCM算法进行加密,所有的文件分片,以及包含所有分片地址的索引文件都是加密储存的
256位的密钥即使是量子计算机采用grover算法,也具有经典计算机下128位的安全性
防篡改
SHA256校验在分享码泄露的情况下,也可确保文件不会被篡改,每个分片都会在下载时进行校验,即使是视频从中间播放也可确保百分百是原文件
单一分享码对应单一文件,同一个分享码即使是上传到自己的储存服务,也没有任何办法进行数据篡改(包括二次利用mixfile原理使用相同的密钥加密不同数据),下载解析或播放时检测到篡改会自动中断数据流
也就是可以保证同一个分享码,不可能下载到不同的文件,只要分享码内容相同,无论以什么手段修改云端的返回的内容都是无法通过校验的
原理: 索引文件结构中会储存所有URL以及其SHA256原内容哈希值,分享码中包含索引文件地址以及其SHA256哈希值,
分享码
分享码中包含了文件名,文件地址,文件大小,密钥等信息,默认采用零宽空白字符进行编码,可到设置中关闭
兼容性: 即使您二次开发增加了自定义的上传节点,生成的分享码也可被任何其他版本的APP解析
上传失败
如果上传到一半中断请确保网络稳定,可以到设置中增加失败重试次数,网速较慢请调低上传并发
默认上传并发是10,也就是10个分片同时上传,例如如果网速为5mb/s建议调整为5
其他
上传视频无法播放,播放没有声音,或者只有声音黑屏怎么办?
浏览器不支持视频编码导致,推荐使用uc浏览器或者下载potplayer,点击potplayer中的打开,打开链接,粘贴局域网地址播放
如果需要字幕.potplayer也可直接添加字幕
文件使用了免费的第三方服务进行储存,不保证能永久保存,也不保证服务稳定性,文件可能随时失效
如果出现无法上传或下载失败等问题,可进行更新或反馈issue
测试
测试视频(coraline)分享码(手机安装mixfile后点击可直接弹出文件信息):
mf://demmGp0ywJ1A29dfuKpqbCCdBe6fmd15daMSjYm8UIvTxcZMXOS8u5r4ruWjPb8U4EF2Qdw2mvr07qpIKS37SMlfQpKS9OQc1vLDlReDGGAQqDmdlqp9snNTx5xk4BdaHGkLf0CYPqFStejRC7GpiDFwBoCRyGkeGZ4CaK75hM1ff4pIGwdVawE6ItsGPOeUSnWsJuE1n2xK5HXimrHrAqzNlQUoO8YWm4JfwGEdfSl
点击直接播放(需要在后台运行mixfile并且取消省电限制):
WebDAV挂载
在局域网地址后方加上/api/webdav,即为webdav地址
上传.mix_list 列表文件,会将解析其中所有文件并添加到当前文件夹
上传.mix_dav存档文件到目录中,会解析其中存档的数据结构,添加到当前文件夹
每个不为空的文件夹中会显示一个"当前目录存档.mix_dav"文件,包含当前文件夹以及其子文件夹的webdav数据
使用Alist挂载后,点击下载,即可下载当前目录以及其子文件夹所有数据作为webdav存档
在Alist等没有文件名长度限制的系统中挂载,如果新建文件夹,名称直接填写文件分享码(需要去掉mf://),则会自动将分享码解析并导入到当前文件夹