如何验证通过webrtc传递的文件的完整性?

时间:2016-07-18 12:35:36

标签: javascript webrtc file-transfer rtcdatachannel

我创建了一个页面,允许使用RTCPeerConnectiondatachannels传输文件。

我需要以某种方式确保接收和传输的文件完全相同,具体而言,没有任何软件包丢失,也没有坏人在中间发送恶包。

我将文件拆分成块,一块一块地发送这些块而没有任何标识。当另一方出现新的webrtc消息时,我将其数据推送到缓冲区,无需任何检查。当传输的大小等于接收的大小时,我组装文件。

这个过程看起来像:

发送方

function sliceFile(offset)
    var reader = new window.FileReader();
    reader.onload = (function () {
        return function (e) {
            sendChannel.send(e.target.result);
            if (self.file.size > offset + e.target.result.byteLength) {
                window.setTimeout(self.sliceFile, 0, offset + CHUNK_SIZE);
            }
        };
    })(self.file);
}

接收器

var receiveBuffer = [];
var receivedSize = 0;
onwebrtcmessage = function(event) {
    receiveBuffer.push(event.data);
    receivedSize += event.data.byteLength;
    if (receivedSize == expectedSize) {
        assembleFile(receiveBuffer);
    }
}

我的问题是: 验证收到的文件是否正确的最佳方法是什么?

我尝试在发送方和接收方上计算文件的md5校验和。由于FileApi不会产生计算校验和的任何已知函数,并且javascript的md5实现会杀死超过15MB的文件的选项卡。这使我无法检查大文件的校验和。

0 个答案:

没有答案