Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用sjcl.hash.sha256.hash对文件内容执行sha256哈希?_Javascript_Hash_Sha256_Sjcl - Fatal编程技术网

Javascript 如何使用sjcl.hash.sha256.hash对文件内容执行sha256哈希?

Javascript 如何使用sjcl.hash.sha256.hash对文件内容执行sha256哈希?,javascript,hash,sha256,sjcl,Javascript,Hash,Sha256,Sjcl,我正在尝试使用javascript对文件内容执行SHA256哈希 我使用以下函数获取文件 var fileReader = new FileReader(); var fileByteArray = []; fileReader.onload = function(evt) { if (evt.target.readyState == FileReader.DONE) { var arrayBuffer = evt.target.result, array

我正在尝试使用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])


有人能帮我解决这个问题吗

你应该把你的
TypedArray
转换成
bitArray

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);
        let bitArray = sjcl.codec.bytes.toBits(array)
        fileHash = generateHashOfFileContent(bitArray); 
        console.log('fileHash1: ' + fileHash);
    }
}
fileReader.readAsArrayBuffer(this.files[0]);

请参见

散列前需要使用拉丁1编码: