javascript - 如何使用 sjcl.hash.sha256.hash 对文件内容执行 sha256 哈希?
问题描述
我正在尝试使用 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]);
推荐阅读
- python - 当所有子列完全空白时如何删除熊猫多级数据框列
- python - 尝试将参数传递给函数,可以通过python烧瓶中的''@app.route''
- mysql - 过滤给定开始和结束日期列的日期
- c# - 使用复合乘法语句时得到错误的结果 - C#
- scala - scala 选项和数据类型
- flask - Flask 内部服务器错误但没有错误日志
- javascript - 使用 svg 图像 HTML - SCSS 使视差鼠标效果响应
- bash - terraform 循环外部输入
- python - TypeError: unhashable type: 'numpy.ndarray' 和 plt.scatter()
- bash - 正则表达式使用一个 if then 语句检查是否存在多个文件