cryptonode.js 的模块(至少在撰写本文时)仍未被认为是稳定的,因此API可能会发生变化。实际上,互联网上每个人用来获取文件的哈希值(md5,sha1,…)的方法都被认为是旧方法(来自Hashclass的文档)(注:强调我的方法):
crypto
Hash
类:哈希 用于创建数据的哈希摘要的类。 这是一个既可读又可写的流。写入的数据用于计算哈希。流的可写端结束后,使用read()方法获取计算得出的哈希摘要。在 传统的更新和摘要方法 也支持。 由crypto.createHash返回。
类:哈希
用于创建数据的哈希摘要的类。
这是一个既可读又可写的流。写入的数据用于计算哈希。流的可写端结束后,使用read()方法获取计算得出的哈希摘要。在 传统的更新和摘要方法 也支持。
由crypto.createHash返回。
尽管hash.update并hash.digest正在考虑遗产,只是引用片段上面的例子中使用它们。
hash.update
hash.digest
不使用这些传统方法获取哈希的正确方法是什么?
从问题中引用的摘录中:
[Hash类]它是可读写的流。写入的数据用于计算哈希。流的可写端结束后,使用read()方法获取计算得出的哈希摘要。
因此,您需要对一些文本进行哈希处理是:
var crypto = require('crypto'); // change to 'md5' if you want an MD5 hash var hash = crypto.createHash('sha1'); // change to 'binary' if you want a binary hash. hash.setEncoding('hex'); // the text that you want to hash hash.write('hello world'); // very important! You cannot read from the stream until you have called end() hash.end(); // and now you get the resulting hash var sha1sum = hash.read();
如果要获取文件的哈希,最好的方法是从文件创建ReadStream并将其通过管道传递给哈希:
var fs = require('fs'); var crypto = require('crypto'); // the file you want to get the hash var fd = fs.createReadStream('/some/file/name.txt'); var hash = crypto.createHash('sha1'); hash.setEncoding('hex'); fd.on('end', function() { hash.end(); console.log(hash.read()); // the desired sha1sum }); // read all file and pipe it (write it) to the hash object fd.pipe(hash);