使用Node.js中的Crypto从一个流生成多个哈希值

时间:2018-05-03 18:47:43

标签: javascript node.js stream

我正在研究Node.js应用程序。来自子进程输出的可读流被传送到来自加密模块的可写流,以生成4个散列值(md5,sha1,sha256和sha512)。该模块仅允许一次生成一个哈希。在创建哈希之后,应该以某种方式进一步传递此流和哈希值,以便将其记录到文件中。我目前停留在创建第一个哈希值。我怎么解决这个问题?部分代码可以在下面看到。

import Crypto from 'crypto';
let md5 = Crypto.createHash('md5');
//How to generate another hash using the same input
md5.on('readable', () => {
    const data = md5.read();
    if (data) {
        console.log(md5.read());
    }
})
...
childProc.stdout.pipe(md5);

1 个答案:

答案 0 :(得分:2)

您可以通过管道连接到多个转换流,从单个流创建多个哈希值。

import Crypto from 'crypto';
let md5 = Crypto.createHash('md5');
let sha1 = Crypto.createHash('sha1');

md5.on('readable', () => {
    const data = md5.read();
    if (data) console.log(data.toString('hex'));
})
sha1.on('readable', () => {
    const data = sha1.read();
    if (data) console.log(data.toString('hex'));
})

childProc.stdin.pipe(md5)
childProc.stdin.pipe(sha1)

此代码会将每个算法的哈希值打印到stdout。