Android視訊加密那點事兒!
阿新 • • 發佈:2019-02-08
前言
最近有需求要做視訊的加密。因為視訊下載到本地後,為了防止二次拷貝和二次上傳到其他渠道,有些還是付費的視訊,因此要對視訊做加密,加密給了二週的研究時間,留下兩週作為開發和測試階段,故事就這樣開始了! 分片加密 萬事開頭難。 “邊播放邊解密”,這是加密解密的最優方案,因此第一週研究的就是這些,當時想到如果可以獲取到播放器的回撥幀應該可以實現,我們用的是vitamio播放器(維他蜜,官方沒有開源,甚至還收費,國內公司“一下科技”開發demo併發布到github,他們的公司爆款產品“秒拍”,“小咖秀”,“一直播”估計都是用的這個vitamio播放器) 首先感謝一下科技android版的demo很豐富,勾選視訊幀回撥,可以從log中看到當前幀的byte大小. 不過這個方案先暫時摒棄了. 最後,針對分片加密,看到了蘋果公司的HLS(Http Live Stream)協議,他這個協議是蘋果的動態位元速率自適應技術,主要用於PC和Apple終端的音視訊服務。其包括一個m3u8的索引檔案,TS(Transport Stream)媒體分片檔案和key加密串檔案。
異或加密
異或加密其實不算是加密,因為它是對檔案進行前後的反轉,因為我們知道播放器從開頭開始播放的,我們把開頭的幾十或者幾百位元組進行異或加密,則播放器就播放不了了,而兩次異或加密就是解密,這種方法比較簡單,適合比較簡單的加密,而且容易破解,因此不建議使用,當然大家可以適當的瞭解下. 這種方式的加密對於大檔案來說也是不耗時的,非常快,我們可以使用RandomAccessFile這個類來隨機讀取檔案的內容進行異或,播放器是從頭開始播放的,我們就從頭開始,異或幾十個位元組即可完成加密,解密操作就是再進行一次異或即可.前,中,後,對檔案加密2M的長度
最後確定使用的方案是對檔案進行前中後進行三段加密,加密總長度為2M的大小(即前面讀取512kb,中間讀取1M,檔案末尾讀取512kb). 這三段加密都涉及到檔案的讀取,尤其對於大檔案的讀取,我們使用java的RandomAccessFile(隨機訪問檔案) 這個類來進行檔案的加密和解密. RandomAccessFile有兩種模式 一種是“讀寫”模式(rw),另一種是“只讀”模式(r),它沒有“只寫”模式,ios使用的fopen有隻寫模式. RandomAccessFile sourceRaf = new RandomAccessFile(sourceFile, "r");
RandomAccessFile tempRaf = new RandomAccessFile(tempFile, "rw");
我們使用這個類對檔案進行加密和解密的操作. 針對這塊基本是檔案的讀取,我就不做過多的描述,原始碼如下,CSDN沒有分了,過段時間免費開源,見諒! Demo截圖: 1.1G 檔案加密耗時: 1.1G檔案解密耗時: 原始碼地址: