7

CryptoJS v3.1.2,sha1.js 汇总

在 JS 中,我想在将 blob 发送到服务器之前计算它的 SHA1。在服务器上,我想计算结果文件的 SHA1 并将其与从 JS 接收到的 SHA1 进行比较。问题是 CryptoJS.SHA1() 生成的哈希不正确(总是 9844f81e1408f6ecb932137d33bed7cfdcf518a3)

JS代码:

function uploadFileslice (slice) { // slice is a blob
    var fileReader = new FileReader()
    fileReader.onload = function(event){
        var arrayBuffer = event.target.result
        var wordArray = CryptoJS.lib.WordArray.create(arrayBuffer)
        var sha1crc = CryptoJS.SHA1(wordArray).toString(CryptoJS.enc.Hex)
        //etc
        requestParams.append('fileslice', slice)
        requestParams.append('sha1crc', sha1crc)
        //etc
    }
    fileReader.readAsArrayBuffer(slice)
}

PHP代码:

$file_crc = sha1_file($_FILES['fileslice']['tmp_name']);
if ($_REQUEST['sha1crc'] !== $file_crc) {
    echo "Invalid CRC: {$_REQUEST['sha1crc']} (expected $file_crc)";
    return;
}

输出:

无效的 CRC:9844f81e1408f6ecb932137d33bed7cfdcf518a3(预期为 3ebe2cd2d8fd8d8f977b6d715f0b1adf5b08b407

我希望有类似 myHash = CryptoJS.SHA1(blob)

4

2 回答 2

12

根据您提供的信息,我不确定您是如何设置的,但为了支持 ArrayBuffers,您必须包含 components/lib-typedarrays-min.js。

https://code.google.com/p/crypto-js/issues/detail?id=67对此进行了讨论。

希望这可以帮助!

于 2013-07-25T02:59:13.650 回答
0

如果您正在使用模块,import您可以:

import Hex from 'crypto-js/enc-hex'
import WordArray from 'crypto-js/lib-typedarrays'
import sha1 from 'crypto-js/sha1'

const hash = sha1(WordArray.create(arrayBuffer)).toString(Hex)
于 2022-02-04T16:24:04.810 回答