Terminal → Camera → File

文件,
从屏幕到手机。

在终端刷新二维码,用手机摄像头接收。适合 SSH 服务器、小文件和配置传输;传输时无需让两端处于同一网络。

macOS · Linux · Windows WSL / Node.js 20+

● ● ●ssh · data-wifi-send
$ data-wifi-send config.json
持续刷新的二维码 · 用手机镜头接收
数据走视觉通道

文件内容不通过网站上传或网络回传

丢帧也能恢复

持续生成新的 fountain 编码帧

按需启用加密

不指定证书即明文,指定公钥即加密

01 /

安装发送端

在显示二维码的电脑或 SSH 远端服务器上安装。先确认已安装 Node.js 20 或更新版本(推荐当前 LTS),以及 curl、tar。

curl -fsSL https://datawifi.clinative.com/install.sh | bash

无需 sudo,无需 Git、npm 或编译。安装器下载预构建命令并验证 SHA-256,安装到当前用户目录;不会修改 shell 配置。查看安装脚本

如果出现 command not found,为当前终端加入命令路径:

export PATH="$HOME/.local/bin:$PATH"
data-wifi-send --help

将 export 这一行加入 ~/.zshrc 或 ~/.bashrc,新终端也能使用。重复运行安装命令即可更新。Windows 请在 WSL 中运行;原生 PowerShell 暂不支持此安装脚本。

从源码安装 / 自定义安装目录
git clone https://github.com/gaoxiaos/data_wifi.git
cd data_wifi
npm ci
npm run build
node dist/sender.js README.md

安装器支持 XDG_DATA_HOME 和 DATA_WIFI_BIN_DIR 指定绝对目录,均通过环境变量传给 bash。安装包与源码使用相同发送逻辑。

02 /

第一次传输

STEP 1 / 手机

兑换并打开接收页

用 Safari 或 Chrome 打开 接收端,输入兑换码。然后点击“开启摄像头并接收”,允许摄像头访问。

STEP 2 / 终端

指定要传的文件

运行下方命令。先传一个小文本文件,二维码会在终端原地刷新。

STEP 3 / 对准

保持画面稳定

镜头包含完整二维码及四周留白。接收完成后检查校验结果,再保存文件。

使用规格:1、3、7、30、90、365 天;首次兑换开始计时,只能兑换一次并绑定当前浏览器。请避免无痕模式或清除网站数据,更换浏览器需新码。

data-wifi-send README.md
# 路径包含空格时使用引号
data-wifi-send "my files/config.json"

接收过程中查看手机进度;手机显示完成后,电脑按 Ctrl+C 停止发送。发送端没有网络回执,不会自动知道手机是否接收完成。iPhone 若未自动保存,请点击下载链接,并在 Safari 下载列表 / “文件”App 中查找。

默认模式是明文:任何能拍到完整二维码流的人都有机会恢复文件。发送敏感文件,请使用下面的证书加密模式。
03 /

证书加密 · QRF3

  1. 在手机接收页展开“QRF3/QRF4 接收密钥”,点击“生成 QRF4 双身份”,下载双公钥 .qrfpub 和私钥 A、B。生成与解密均在浏览器本地运行。
  2. 离线妥善保存私钥。把公钥包交给发送端,并核对页面显示的公钥包指纹。QRF3 使用双公钥包的第一身份,需要私钥 A 解密。
  3. 发送时加入 --recipient。手机接收完成后点击“选择私钥并解密”,选择对应的私钥 A,验证成功后保存原文件。
data-wifi-send secret.txt --recipient iphone-receiver.qrfpub

也可以先在手机保存 .qrf3 密文包,之后在接收页点击“打开已有密文包”,或使用本地命令解密:

data-wifi-decrypt received.qrf3 --identity iphone-key-a.qrfkey
# 如需指定输出路径
data-wifi-decrypt received.qrf3 --identity iphone-key-a.qrfkey --output restored.txt
在可信电脑生成单身份密钥
data-wifi-keygen my-phone
# 得到 my-phone.qrfpub(公钥)和 my-phone.qrfkey(私钥)
data-wifi-send secret.txt --recipient my-phone.qrfpub

手机选择 my-phone.qrfkey 解密。这里的证书是项目的 JSON 密钥文件,不是 HTTPS 的 TLS 证书。接收者私钥只应保留在可信环境;丢失后无法解密,泄露后历史录像也可能被解密。

可压缩内容先自适应 gzip,再使用 P-256 ECDH、HKDF-SHA-256、AES-256-GCM 加密。文件名与 SHA-256 位于密文中;错误私钥或被篡改的数据会被拒绝。私钥不会上传,也不会保存到浏览器存储。

04 /

双槽容器 · QRF4

适用于原始文件在可信环境中准备、展示二维码的电脑可能被监听的场景。先在可信电脑生成包含真实诱饵的容器,再让展示电脑只读取不透明的 .qrf4 文件。

1. 生成双身份并离线保存私钥

可以使用手机接收页生成,或在可信电脑运行:

data-wifi-keygen iphone --qrf4
# iphone.qrfpub / iphone-a.qrfkey / iphone-b.qrfkey

2. 在可信电脑打包

data-wifi-pack \
  --recipient iphone.qrfpub \
  --decoy vacation.jpg \
  --secret private.conf \
  --output transfer.qrf4

诱饵应当是内容合理、能正常打开的真实文件。省略 --secret 即生成只含诱饵的普通包,另一个槽填充为随机数据。

3. 展示电脑只运行渲染器

只把容器交给展示电脑;该电脑无需公钥或私钥,也不应接触原始隐藏文件和打包过程。

data-wifi-render transfer.qrf4
# 省略路径时读取当前目录的 transfer.qrf4
data-wifi-render

4. 手机接收后选择相应私钥

私钥包含隐藏文件的包只含诱饵的普通包
A打开隐藏文件无法解密随机槽
B打开真实诱饵打开真实诱饵
data-wifi-decrypt transfer.qrf4 --identity iphone-b.qrfkey

容器固定包含两个等长、随机排序的匿名槽,传输量约为较大文件压缩后所处填充桶的两倍。它不掩盖在展示电脑上发生的原始文件访问,也不能保证任何现实场景下的可否认性。请把打包和隐藏私钥始终留在可信环境。

05 /

参数与传输建议

一般直接运行发送命令即可。发送端根据待传容器大小选择块大小和刷新率,再按终端空间回退。

自动策略帧载荷刷新率
≤ 64 KiB400 B8 fps
64 KiB – 1 MiB704 B12 fps
> 1 MiB1440 B24 fps
# 镜头识别不稳定时,降低刷新率 / 二维码密度
data-wifi-send config.json --fps 4 --chunk 400 --ecc L
# 加密也能使用这些参数
data-wifi-send secret.txt --recipient iphone.qrfpub --fps 4

--fps 控制刷新率;--chunk 控制每帧数据量,手动指定且终端放不下时会报错;--ecc 支持 L/M/Q/H,默认 L。增大 QR 纠错等级也会增大二维码,通常先调整刷新率、窗口与镜头位置。

放大终端窗口、适当减小字号、避免反光和抖动。二维码四周留白要完整入镜,画面不应过曝。适合小文本、配置、证书与密钥;照片、视频等已压缩的大文件会明显更慢,优先用其他传输方式。

06 /

常见问题

手机打不开摄像头?

请先兑换有效使用码,再使用 HTTPS 接收地址,在 Safari / Chrome 中直接打开,避免微信等内嵌浏览器。检查网站摄像头权限;之前拒绝过权限时,需要在浏览器或系统设置中重新允许。手机访问局域网 HTTP 地址通常无法调用摄像头。

兑换码可以换手机使用吗?

每个码只能兑换一次,权限绑定兑换时的浏览器。有效期从首次兑换开始计算,每天为连续 24 小时。换手机、使用其他浏览器、清除网站数据或退出无痕窗口后,需要新兑换码。到期或被停用后会返回兑换页。

画面对着二维码,但进度长时间不变?

先测试一个小文本文件。确认二维码没有被裁剪,包含四周白边;保持镜头稳定并调节距离。将刷新率降至 4 fps、块大小降至 400 B 再试。恢复文件需要足够多独立帧,单看识别次数不等于有效数据量;终端刷新率也不等于手机识别速度。

传输需要互联网吗?网站会收到文件或私钥吗?

兑换使用码、验证权限、加载网页和下载安装包需要网络。文件通过屏幕和摄像头传递,解码、密钥生成、解密在设备本地进行,没有文件上传接口或传输完成回执。云端保存兑换码、兑换状态与有效期,不接收文件或私钥。已经验证并加载完成的页面临时离线时可在剩余有效期内继续使用;请保持接收页打开,刷新可能需要重新联网。

有哪些完整性校验和压缩?

QRF2 明文模式传输原始数据,使用 CRC 校验传输差错,不提供密码学认证。QRF3/QRF4 加密模式包含 AES-GCM 认证与原文件 SHA-256 校验,并在加密前对可压缩内容自适应 gzip;JPEG、PNG、ZIP 等已压缩内容通常保留原样。校验失败时不应把结果当作成功文件。

如何更新和卸载?

更新:重复运行本页安装命令,新版本校验成功后切换,旧版本保留。卸载:删除 ~/.local/bin/ 下的五个 data-wifi-* 命令链接,再删除专用的 ~/.local/share/data-wifi/ 目录;自定义目录时按实际路径操作。你的原文件和密钥不在安装目录中。

有哪些可用命令?

data-wifi-send 明文 / QRF3 发送;data-wifi-keygen 生成密钥;data-wifi-decrypt 离线解密;data-wifi-pack 可信环境打包 QRF4;data-wifi-render 显示 QRF4。更详细的源码和说明见 GitHub 仓库。