Узел 'crypto' SHA256, модель хеширования, ведет себя хаотично
У меня есть функция, которая принимает файл и находит его хэш SHA256. Каждый раз, когда я повторно отправляю файл, он создает разные хэши для одного и того же файла.
При первом представлении выдает правильный хеш. Каждое повторное представление создает неправильный хэш. Если я повторно отправляю одни и те же файлы в одном и том же порядке, все они выдают одинаковый (неправильный) хэш.
Я думаю, что буфер может накапливаться. Или может быть что-то еще? Я пытаюсь выяснить, как очистить буферный массив.
Есть идеи?
import React, { Component } from "react";
const crypto = require("crypto");
const hash = crypto.createHash("sha256");
class SearchPage extends Component {
constructor(props) {
super(props);
this.state = {
hashOutput: "",
fileName: "",
};
}
onChange(e) {
let files = e.target.files;
this.setState({ fileName: files[0].name });
let reader = new FileReader();
reader.readAsArrayBuffer(files[0]);
reader.onload = e => {
hash.update(Buffer.from(e.target.result));
const hashOutput = hash.digest("hex");
this.setState({ hashOutput });
console.log(hashOutput);
};
}
render() {
return (
<div onSubmit={this.onFormSubmit}>
<input type="file" name="file" onChange={e => this.onChange(e)} />
</div>
);
}
}
export default SearchPage;
0 ответов
Вы создаете хеш один раз (const hash ...
), но затем добавляя к тому же хешу каждый раз, когда ваша страница изменяется с hash.update(...)
. Это будет каждый раз генерировать другой хэш.
Аналогия со струнами:
var s = "";
onChange(e) {
s = s + "data";
console.log(s);
}
// Output on first load: data
// Output on secnd load: datadata
// etc
Если вы каждый раз создаете новый хеш, он должен быть последовательным.
const hashOutput = crypto.createHash("sha256")
.update(Buffer.from(e.target.result))
.digest("hex");