javascript - 在 Angularjs 应用程序和 bash 中使用相同文件的不同 SHA256
javascript - Different SHA256 using the same file in Angularjs app and bash
我需要在我的 AngularJS 应用程序中获取上传文件的摘要,但结果摘要与我通过 bash 获取的文件摘要不同。
我开始使用 jshashes, but when I saw that the resultant hash (on the web app) was different from the one which I get locally using bash I decided to move to CryptoJS。但是结果是一样的,上传文件的哈希还是不一样。
这是我的代码:
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 在下面的评论中所说,readAsBinaryString
已被弃用,它是一种异步方法,所以这是我的实际代码:
var reader = new FileReader();
reader.onload = function() {
controller.fileHash = CryptoJS.SHA256(reader.result).toString(CryptoJS.enc.Hex);
};
reader.readAsArrayBuffer(controller.file);
我尝试了 解决方案,以便将 ArrayBuffer
对象转换为 BinaryString
。但是结果还是错了
更新 2:
这是我要散列的对象的控制台日志图像
readAsBinaryString
is deprecated, you should use readAsArrayBuffer
.
无论哪种方式,这些函数都会启动一个异步操作,您可以在 FileReader
实例的 load
事件中读取其结果。
var reader = new FileReader();
reader.onload = function(){
controller.fileHash = CryptoJS.SHA256(reader.result).toString(CryptoJS.enc.Hex);
};
reader.readAsArrayBuffer(controller.file);
回顾我们在评论中的对话:问题是 crypto-js
不对二进制文件进行操作,而是对字符串进行操作。
你可以直接在js-sha256
.
中得到一个支持ArrayBuffer
s的SHA256实现
我需要在我的 AngularJS 应用程序中获取上传文件的摘要,但结果摘要与我通过 bash 获取的文件摘要不同。
我开始使用 jshashes, but when I saw that the resultant hash (on the web app) was different from the one which I get locally using bash I decided to move to CryptoJS。但是结果是一样的,上传文件的哈希还是不一样。
这是我的代码:
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 在下面的评论中所说,readAsBinaryString
已被弃用,它是一种异步方法,所以这是我的实际代码:
var reader = new FileReader();
reader.onload = function() {
controller.fileHash = CryptoJS.SHA256(reader.result).toString(CryptoJS.enc.Hex);
};
reader.readAsArrayBuffer(controller.file);
我尝试了 ArrayBuffer
对象转换为 BinaryString
。但是结果还是错了
更新 2:
这是我要散列的对象的控制台日志图像
readAsBinaryString
is deprecated, you should use readAsArrayBuffer
.
无论哪种方式,这些函数都会启动一个异步操作,您可以在 FileReader
实例的 load
事件中读取其结果。
var reader = new FileReader();
reader.onload = function(){
controller.fileHash = CryptoJS.SHA256(reader.result).toString(CryptoJS.enc.Hex);
};
reader.readAsArrayBuffer(controller.file);
回顾我们在评论中的对话:问题是 crypto-js
不对二进制文件进行操作,而是对字符串进行操作。
你可以直接在js-sha256
.
ArrayBuffer
s的SHA256实现