我正在尝试使用javascript对文件内容执行SHA256哈希。
我使用以下功能获取文件
var fileReader = new FileReader();
var fileByteArray = [];
fileReader.onload = function(evt) {
if (evt.target.readyState == FileReader.DONE) {
var arrayBuffer = evt.target.result,
array = new Uint8Array(arrayBuffer);
fileHash = generateHashOfFileContent(array);
console.log('fileHash1: ' + fileHash);
}
}
fileReader.readAsArrayBuffer(this.files[0]);
并且哈希函数是
function generateHashOfFileContent(fileData){
var bitArray = sjcl.hash.sha256.hash(fileData);
var digest_sha256 = sjcl.codec.hex.fromBits(bitArray);
console.log("Sha256 "+digest_sha256);
return digest_sha256;
}
但是当我选择二进制文件时,它会产生错误的哈希数据”
我只能使用文本文件
产生实际的哈希,并更改fileReader.readAsArrayBuffer(this.files [0]); -------> fileReader.readAsText(this .files [0]);有人可以帮我解决问题
我正在尝试使用javascript对文件内容执行SHA256哈希。我使用以下函数获取文件:var fileReader = new FileReader(); var fileByteArray = []; fileReader.onload = ...
[如果您查看sha256.hash()
功能,您会发现它试图将data
输入转换为Uint32Array
。对于arrayBuffer
返回的FileReader
,这是有效操作。因此,假设浏览器的typeof Uint32Array !== 'undefined'
的值为true
(which it should),则只需将arrayBuffer
传递给hash()
函数即可: