gpt4 book ai didi

javascript - 在 Angularjs 应用程序和 bash 中使用相同文件的不同 SHA256

转载 作者:行者123 更新时间:2023-12-03 02:01:30 29 4
gpt4 key购买 nike

我需要在我的 AngularJS 应用程序中获取上传文件的摘要,但结果摘要与我使用 bash 获得的文件摘要不同。

我开始使用jshashes ,但是当我看到生成的哈希值(在网络应用程序上)与我在本地使用 bash 获得的哈希值不同时,我决定转向 CryptoJS 。但结果是一样的,上传文件的哈希值仍然不同。

这是我的代码:

var reader = new FileReader();    
reader.readAsBinaryString(controller.file);
controller.fileHash = CryptoJS.SHA256(reader.result).toString(CryptoJS.enc.Hex);

正如你所看到的,代码非常简单,只需使用 FileReader 从变量中读取上传的文件,并将值转换为 BinaryString,对内容进行哈希处理,最后将结果分配给另一个 Controller valriable在 html 中显示它。

在我的 shell(本地环境)中,为了获取文件摘要,我运行以下命令:

$ shasum -a 256 [path/to/file]

为了上传文件,我使用 ng-file-upload

我缺少什么?如果有人可以帮助我或指导我找到解决方案,我将非常感激。

提前谢谢您。

更新 1:正如 @destroyer 在下面的评论中所说, readAsBinaryString 已被弃用,它是一个异步方法,所以这是我的实际代码:

var reader = new FileReader();
reader.onload = function() {
controller.fileHash = CryptoJS.SHA256(reader.result).toString(CryptoJS.enc.Hex);
};
reader.readAsArrayBuffer(controller.file);

我试过this解决方案,以便将ArrayBuffer对象转换为BinaryString。但结果还是错误。

更新 2:这是我想要散列的对象的控制台日志图像 File object console.log

最佳答案

readAsBinaryString已弃用,您应该使用 readAsArrayBuffer .

无论哪种方式,这些函数都会启动异步操作,您可以在 FileReader 实例的 load 事件中读取其结果。

var reader = new FileReader();    
reader.onload = function(){
controller.fileHash = CryptoJS.SHA256(reader.result).toString(CryptoJS.enc.Hex);
};
reader.readAsArrayBuffer(controller.file);

反射(reflection)我们在评论中的对话:问题是 crypto-js 不操作二进制文件,而是操作字符串。

您可以直接在js-sha256中获得支持ArrayBuffer的SHA256实现。 .

关于javascript - 在 Angularjs 应用程序和 bash 中使用相同文件的不同 SHA256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49998326/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com