要把檔案傳送到另一部電腦或手機,要不是透過無線網絡,就是透過 USB 手指。不過如果這兩個方法都行不通的話怎麼辦?有人就想出透過 QR Code 和鏡頭,以單純的光線來傳輸檔案,好處是不需要安裝程式或註冊、不需要互相配對,更不用擔心檔案會在網絡中被截取或留下痕跡,需要的權限也只是接收方的鏡頭使用權限。而其中一個運用這個原理的專案,就是今次為大家介紹的《Decimen Optical Transfer》。
無網無痕傳輸原理
《Decimen Optical Transfer》是一個用「螢幕 + 鏡頭」在兩部裝置之間傳檔的開源專案,發送端把檔案或字串切割成固定大小的碎片,編碼成快速變換的動畫 QR Code 串流,顯示在螢幕上。而接收端只要用相機對準 QR Code,就能即時解碼並還原檔案。完全不需要網路、App、註冊、配對或額外權限(只需相機)。資料以光線形式傳遞。

《Decimen》使用一種名為盧比變換碼 (Luby transform codes) 的湧泉碼(Fountain Codes),將資料分割成 K 個原始區塊,解決單向通道問題,即使漏掉很多幀,只要收到大約 K × 1.15 個不同幀,就能還原完整檔案,不需要重傳請求。而每個幀都是自描述的(含 session ID、序號、檔案長度、hash 等),毋須交握,中途加入也能接上。
功能與限制
《Decimen》是基於另一個大規模實驗的簡化版本,原實驗的傳輸速度可達到手持 128KB/s 及固定 186KB/s,而這個專案在筆者測試時就可達到 45KB/s 左右,傳輸 1MB 大約需要 25 秒,但要取決於現場燈光和屏幕亮度,與及手機有多穩定。手震的話傳輸就會變慢。

程式支援最大 64MB 的任何檔案或文字字串,程式會保留檔案的 MIME 類別,以接收裝置的相應檔案類型來還原。接收完成後會進行 SHA-256 驗證才提供下載以確保檔案完整性。但要注意這個程式沒有對檔案進行加密,所以雖然傳輸時不會在網絡被攔截或留下痕跡,但任何能看到屏幕的相機都能讀取到內容(例如高解像閉路電視)。
另外要注意即使不需要真實連線來傳輸,但手機傳輸的話瀏覽器須透過 HTTPS 協議才能取用相機,自行架設的話瀏覽器有可能會因為沒有有效憑證而彈出警告(例如「不是私人連線」警告),不過由於實際上不需要真實連接上網,大家只要在警告中點擊「進階 > 到訪此網站」即可繼續使用。

使用方法
《Decimen》同時提供獨立運行的發送端及接收端 HTML 檔案(毋須伺服器),與及伺服器用的檔案供大家自行架設在自己電腦上。另外,作者亦提供了架設在 decimen.app 的網頁方便手機用家在無法自行架設或執行 HTML 檔時,暫時連到該網站讀取 HTTPS 協議下的 HTML 檔案,讀取後即使中斷連線仍可傳輸檔案。

下載《Decimen Optical Transfer》:按此
| 運行方式 | 說明 | 離線 |
|---|---|---|
| decimen-sender.html | 發送端介面,獨立執行 | 常時 |
| decimen-receiver.html | 接收端介面,獨立執行 | 常時 |
| decimen.app 或 decimen-site.zip | 架設在伺服器的 HTML 檔 | 首次訪問後即可離線 |
PC-PC 傳送
電腦間傳送是最簡單的,只要將發送端及接收端 HTML 檔案個別放在雙方電腦,雙擊執行即可。
PC-手機/手機-手機 傳送
由於手機不能像電腦那樣執行 HTML 檔案,所以就需要從 decimen.app 或自行架設的網站載入發送端/接收端 HTML 檔案。載入後即使使用飛行模式也可以收發檔案。
以下就示範使用發送端 HTML 在電腦使用發送檔案,並以 iPhone 的 Safari 從 decimen.app 取得接收端 HTML 來接收檔案。當然,類似的手法也可以用於手機之間傳送檔案。
傳送步驟
發送端
雙擊 decimen-sender.html,點擊「Choose file」,選擇 64MB 以下的檔案,頁面中即會顯示快速變換的 QR Code。點擊 Transfer Settings 可以調整幀速、每幀容量、容錯程度和 QR Code 大小。



接收端
由於手機在保安上不能像電腦那樣直接執行 HTML 檔,手機瀏覽器取用相機時亦需要 getUserMedia API,需要 HTTPS 協議連線,所以只能以手機瀏覽器連接 decimen.app 或你的電腦來取得 decimen-receiver.html,但只要載入後即可離線,不會影響相機使用。
1. 以 Safari 連接 decimen.app,點擊右邊的 RECEIVE;

2. 如果是自行架設,連接自己的電腦後會出現這警告畫面,點擊「到訪此網站」連結,並點擊「到訪網站」即可繼續;

3. 點擊 Start camera;

4. 允許取用相機;

5. 鏡頭對準電腦顯示的 QR Code 即開始接收。畫面會顯示預計要多久才完成接收和現時的傳輸速率。打開下方的 Live Diagnostics 還可以查看解碼幀速、經過時間和已收到的容量等。手機愈穩定,傳輸速度愈快。傳輸期間可以移開手機暫停,只要手機再次對準 QR Code 就能繼續;

6. 完成接收後,如果是圖片的話會即時顯示在頁面中;

7. 點擊藍色 Save 按鈕即可以接收到的檔案儲存下來;

8. 檔案會儲存在 iPhone 的「下載項目」資料夾,可以透過《檔案》App 存取,並會自動傳送到 iCloud 備份。


結語:機構可能要擔心資料外洩了⋯⋯
利用 QR Code 傳送檔案雖然慢一些,但勝在不需要連線、安裝檔案或用 USB 手指。不過因為這種傳送檔案手法幾乎毫無痕跡,發送端只是一個約 55KB 的 HTML 檔,可以放在 USB 手指直接執行,對於機構來說可能就要擔心重要檔案透過這種手法外洩了。
Decimen Optical Transfer GitHub 專案網址:https://github.com/bashalarmistalt/decimen-optical-transfer



