在JS中哈希文件

问题描述 投票:1回答:1

我正在尝试使用这段代码对JS中的文件进行哈希处理:

var CryptoJS = require("crypto-js");
var fs = require('fs');

fs.readFile('./file.txt', function(err,data){
     if(err) {
         console.error("Could not open file: %s", err);
         process.exit(1);
     }
         console.log("HASH: " + CryptoJS.SHA256(data));
});

无论我写什么.txt,产生的哈希始终是:4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e

如果我将某些字符串数据放入CryptoJS.SHA256("text_exemple"),则哈希可以正常工作。

我在这里想念什么?

javascript node.js file hash sha256
1个回答
0
投票

我很好奇为什么这没有用。首先,让我们解释一下实际发生的情况。每次调用readFile时都不会包括文件编码类型。每readFile docs

如果未指定编码,则返回原始缓冲区。

很好。您可能会认为文件的缓冲区与文件中的实际数据一样具有可哈希性。但是,我相信正在发生的事情是,加密库没有考虑接收缓冲区,并且缓冲区被隐式转换为字符串。如果在缓冲区上调用readFile,则会得到一个空字符串,并且无论对一个空String进行哈希处理多少次,都将得到相同的结果。

因此,解决方案是只提供一种编码:

toString()

或执行一些操作以将Buffer转换为String,从而获得实际数据。

© www.soinside.com 2019 - 2024. All rights reserved.