javascript - 如何在浏览器中计算文件的校验和并获得与 Windows 命令提示符相同的结果

标签 javascript node.js hash sha1

我正在尝试从我网页上上传的文件中获取校验和/哈希。

我目前可以通过浏览器上传文件,然后使用 node.js 加密库计算哈希值。我首先将 blob 转换为数据 Url。

export function calculateHash(dataUrl, type){

  const sha1sum = crypto.createHash('sha1').update(dataUrl).digest("hex");
  console.log('Hash sum is ' + sha1sum);

}

结果:66b8bdd2d1d49f708722c15b26409bc072096697

当我使用以下命令从 Windows 命令提示符手动计算哈希时..

fciv.exe 1_1.wav -sha1

结果:b06071b13a1b50cd2976ed7bb4180f6963e8db8e

我希望从浏览器中的数据 url 获得与从命令提示符进行手动检查相同的校验和结果。

这可能吗?

最佳答案

数据 url 看起来像 data:image/png;base64,<BASE-64 DATA> .您需要提取 BASE-64 DATA 部分,解码 base64,然后运行您的哈希算法。或者 - 如果您想在浏览器中执行散列 - 使用 FileReader API:

function calculateHash(file, callback) {  
  let reader = new FileReader();
  reader.onload = function(event) {
    let file_sha1 = sha1(reader.result);
    callback(file_sha1);
  };
  reader.readAsArrayBuffer(file);
}

let input = document.getElementById("input-file"),
    info = document.getElementById("info");

input.addEventListener("change", function(event) {
  let file = input.files[0];
  
  if (file) {
    calculateHash(file, function(file_sha1) {
      info.textContent = file_sha1;
    });
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-sha1/0.6.0/sha1.min.js"></script>

<input id="input-file" type="file">
<div id="info"></div>

需要 js-sha1 (npm install js-sha1)。

归功于:How to checksum the file to be uploaded with javascript?

关于javascript - 如何在浏览器中计算文件的校验和并获得与 Windows 命令提示符相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37892427/

相关文章:

php - 向 PHP 脚本发送请求时出现错误符号

javascript - AngularJS : Directive Scope Update & click event

javascript - jQuery 复选框 : select all/none except one

Javascript 调用表单提交 -> 调用 -> Javascript(ajax 调用)没有从 ajax 调用中获得返回值

node.js - socket.io 在连接/websocket 上创建 502 Bad Gateway 无效

ruby - 字符串到哈希的转换

javascript - 具有网格布局的可重用 Vue JS 搜索过滤器

node.js - 如何在 node.js 上调试 "Error: spawn ENOENT"?

node.js - 如何在nodeJS中将音频和视频.webm文件合并为一个?

c++ - 寻找哈希函数/Ordered Int/to/Shuffled Int/