【发布时间】:2018-04-25 00:54:05
【问题描述】:
我需要在我的 AngularJS 应用程序中获取上传文件的摘要,但结果摘要与我使用 bash 获得的文件摘要不同。
我开始使用jshashes,但是当我看到生成的哈希(在网络应用程序上)与我在本地使用 bash 获得的不同时,我决定转移到CryptoJS。但是结果是一样的,上传文件的hash还是不一样的。
这是我的代码:
var reader = new FileReader();
reader.readAsBinaryString(controller.file);
controller.fileHash = CryptoJS.SHA256(reader.result).toString(CryptoJS.enc.Hex);
如您所见,代码非常简单,只需使用 FileReader 从变量中读取上传的文件并将值转换为 BinaryString,对内容进行哈希处理,最后将结果分配给另一个控制器变量以在html.
在我的 shell(本地环境)中,为了获取文件摘要,我运行以下命令:
$ shasum -a 256 [path/to/file]
为了上传文件,我使用ng-file-upload
我错过了什么?如果有人可以帮助我或指导我查看解决方案,我将非常感激。
提前谢谢你。
更新 1:
正如@destroyer 在下面的cmets 中所说,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。但结果还是错了。
【问题讨论】:
-
我们能看到“本地”代码吗?
-
@destoryer 我刚刚编辑了这个问题。总结一下,在我的本地环境中我运行这个命令:
$ shasum -a 256 [path/to/file] -
我删除了我的答案,因为我似乎无法帮助你:我过去在
ArrayBuffers 上使用过js-sha256,没有任何问题。 -
@destroyer 你做到了...非常感谢。有用。我花了几天时间试图解决它,我不知道为什么我直到现在才找到这个库,但它确实有效!如果你写的答案只包含图书馆的链接,我会投票。
-
很高兴为您提供帮助,答案已更新。
标签: javascript angularjs sha256 cryptojs ng-file-upload