我有一个获取文件并找到其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 :(得分:1)
您一次创建了一个哈希(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");