Hash类


Hash 类是用于创建数据散列摘要的工具类。它可以以两种方式之一使用:

  • 作为可读和可写的,写入数据并在可读端产生计算后的散列摘要。

  • 使用 hash.update()hash.digest() 产生计算后的散列。

crypto.createHash() 方法用于创建 Hash 实例。Hash 对象无法直接使用 new 关键词创建。

示例:将 Hash 对象用作流:

  1. const crypto = require('crypto');
  2. const hash = crypto.createHash('sha256');
  3. hash.on('readable', () => {
  4. var data = hash.read();
  5. if (data)
  6. console.log(data.toString('hex'));
  7. // Prints:
  8. // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50
  9. });
  10. hash.write('some data to hash');
  11. hash.end();

示例:使用 Hash 并导流:

  1. const crypto = require('crypto');
  2. const fs = require('fs');
  3. const hash = crypto.createHash('sha256');
  4. const input = fs.createReadStream('test.js');
  5. input.pipe(hash).pipe(process.stdout);

示例:使用 hash.update()hash.digest() 方法:

  1. const crypto = require('crypto');
  2. const hash = crypto.createHash('sha256');
  3. hash.update('some data to hash');
  4. console.log(hash.digest('hex'));
  5. // Prints:
  6. // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50

hash.update(data[, input_encoding])

使用给定的 data 更新哈希内容,给出的 input_encoding 编码,可以是 'utf8''ascii''binary'。如果没有提供 encoding,同时 data 是一个字符串,将强制使用 'binary' 编码。如果 data 是一个 Buffer,那么 input_encoding 参数会被忽略。

当它作为流时,可以在新数据上多次调用。

hash.digest([encoding])

计算所有传入的数据的散列摘要(使用 hash.update() 方法)。encoding 可以是 'hex''binary''base64'。如果提供了 encoding,会返回一个字符串;否则返回一个 Buffer

在调用 hash.digest() 方法之后,Hash 对象将不能再次使用。多次调用将导致抛出错误。