Мне нужно вычислить 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>
)
}
}
На стороне сервера, которую я используюстандартный способ передачи файла и хеша calcualte:
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
1024 * * MES на HB5 (я также подтвердил использование языка CES на C5 (версия SQL на C # (версия C #)', blob))
Перед вызовом md5Hash.toString (), вот значение элементов массива в md5Hash.words:
- [0] 1216314146
- [1] -159182126
- [2] -1044657861
- [3] 451560539