文件哈希(Crypto-JS):Chrome和Firefox中的结果相同/ Safari中的结果不同

时间:2018-10-21 00:06:01

标签: javascript hash safari

我正在尝试通过Crypto-JS对文件进行哈希处理。

这个想法是对前几个字节进行哈希处理(即从10100)。

在Safari中(最后一个)的结果与在Chrome和Firefox中(最后一个)的结果不同:是否知道Safari中出了什么问题?

JSfiddle

哈希函数

const hashthefile = (filetoHash) => {
    return new Promise((resolve, reject) => {

        var start = 10;
        var stop = 100;

        // set reading operations through the FileReader API
        var reader = new FileReader();
        reader.onloadend = function(event) {
            // when the entire read request has been completed
            if (event.target.readyState == FileReader.DONE) {
                var data = event.target.result;
                var encrypted = CryptoJS.SHA256(data).toString();
                resolve(encrypted);
            }
        }
        // handle error
        reader.onerror = function(event) {
            reject('reading error')
        };
        // slice the file according to first and last bytes defined
        // complete API there: https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice
        var blob = filetoHash.slice(start, stop + 2);
        // launch the file sliced reading as a base64 encoded string
        reader.readAsDataURL(blob);
    });
}

1 个答案:

答案 0 :(得分:0)

我想我想出了如何在Chrome,Firefox 和Safari 之间实现一致的哈希值:

  • 代替readAsDataURL
  • 使用readAsArrayBuffer

向更多建议和更明智的编码器求精(仍然不知道为什么使用readAsDataURL会产生特定于Safari的结果)。