react crypto-js / md5和C#中相同文件的不同MD5哈希

时间:2018-10-05 16:57:59

标签: c# reactjs hash cryptojs

我需要在客户端(reactjs)上计算文件的MD5哈希值,然后将此哈希值发送到服务器端(Web API / C#),以查看其是否已经存在。由于某种原因,我在两侧之间得到了不同的哈希值。我以为这可能是编码方面的问题,但是我不确定。

这是反应成分:

import React, { Component } from 'react';
import { Button } from 'react-bootstrap';
import md5 from 'crypto-js/md5';

export default class TestFileUploadMd5 extends Component {
constructor(props) {
    super(props);
    this.state = {
        selectedFile: null
    }
}

onFileChanged(e) {
    var file = e.target.files[0];
    this.setState({ selectedFile: file });
}

calculateMd5() {    
    var md5Hash = md5(this.state.selectedFile);
    var md5HashString = md5Hash.toString();        
}

render() {
    var self = this;
    return (
        <div>
            <input type="file" onChange={(e) => this.onFileChanged(e)} />
            <Button onClick={(e) => this.calculateMd5()}>Calculate</Button>
        </div>
    )
}

}

在服务器端,我使用标准方法来流式传输文件并计算哈希:

var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
var file = provider.Contents[0];
var blob = await file.ReadAsByteArrayAsync()

var md5 = System.Security.Cryptography.MD5.Create();
byte[] hash = md5.ComputeHash(blob);

var sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
   sb.Append(hash[i].ToString("X2"));

有人知道为什么两个哈希不同吗?

更新

客户端反应版本产生: 487f7b22f68312d2c1bbc93b1aea445b

服务器c#版本产生: 8828414F794468DF83D346BF0FE7CFE

我还通过SQL SERVER的HASHBYTES('md5',blob)确认了C#版本

在调用md5Hash.toString()之前,这是md5Hash.words中数组项的值:

  • [0] 1216314146
  • [1] -159182126
  • [2] -1044657861
  • [3] 451560539

0 个答案:

没有答案