CryptoJS为不同的文件创建相同的哈希值

时间:2020-09-07 20:50:29

标签: javascript cryptojs

我正在使用CryptoJS创建上传文件的哈希值。但是,我上传的所有文件都产生相同的哈希值。我知道问题出在我的“ onFileChange”调用中,但是我不确定我在做什么错。任何帮助将不胜感激。

created_at

导出默认的connect()(FileSelectorComponent);

enter image description here

期望值: enter image description here

2 个答案:

答案 0 :(得分:1)

您正在加载读取器之前计算哈希值。

哈希值“ d41d8cd98f00b204e9800998ecf8427e”是空字符串的MD5哈希值。

有行:

reader.onloadend = function () {
  text = (reader.result);
}

表示text变量将在读取器异步完成加载后分配结果。但是到那时,该功能的其余部分已经执行。

因此,您需要确保该过程在text变量获得新值之后进行,例如:

reader.onloadend = function () {
  text = (reader.result);

  reader.readAsBinaryString(event.target.files[0]);
  var hash = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(text));
  console.log(hash.toString());
}

答案 1 :(得分:0)

  // On file select (from the pop up) 
onFileChange = event => {
    var text = '';
    // Update the state 
    this.setState({ selectedFile: event.target.files[0] });
    console.log(event.target.files[0]);
    var reader = new FileReader();

    reader.onloadend = function () {
        text = (reader.result);
        var hash = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(text));
        console.log(hash.toString());
    }

    reader.readAsBinaryString(event.target.files[0]);

    //console.log(text);
   

    //console.log(hash.toString());
};

CryptoJS需要放置在回调函数中。它解决了我的问题。