Module 基礎模組

模組hash

hash 模組主要用於實現訊息摘要演算法,是實現加密演算法中,非常重要的一個子模組。同時,訊息摘要演算法也是許多加密演算法的基礎。

在使用hash子模組之前,需要使用require('hash');載入該模組。

hash模組中,主要包含以下幾個類別DigestHmac。其中,Digest類別用於計算訊息摘要演算法,Hmac類別用於計算帶有密鑰的雜湊訊息。

以下是一個簡單的使用Digest類別計算MD5摘要的範例程式碼:

1 2 3 4 5 6 7 8 9 10 11 12
const hash = require('hash'); // create a MD5 digest object const digest = hash.digest(hash.MD5); // update digest with data const data = 'hello, world'; digest.update(data); // output result in hex const result = digest.digest('hex'); console.log(result);

在上述範例程式碼中,我們首先使用hash.digest([hash.MD5](hash.md#MD5))將一個Digest物件初始化為MD5模式。然後,我們使用update()方法向Digest 物件新增需要進行摘要計算的資料。接著,我們使用digest()方法計算摘要結果,並傳回透過參數指定的編碼方式(這裡使用的是十六進位編碼)。最後,輸出計算出的摘要結果。

除了MD5以外,Digest類別也支援其他摘要演算法,如SHA-1SHA-256SHA-512等。使用時需要將md5參數改成對應的摘要演算法即可。

靜態函數

digest

根據指定的演算法識別建立一個資訊摘要運算對象

1 2
static Digest hash.digest(Integer algo, Buffer data = NULL);

呼叫參數:

  • algo: Integer, 指定摘要運算演算法
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

md5

建立一個MD5 資訊摘要運算對象

1
static Digest hash.md5(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

sha1

建立一個SHA1 資訊摘要運算對象

1
static Digest hash.sha1(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

sha224

建立一個SHA224 資訊摘要運算對象

1
static Digest hash.sha224(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

sha256

建立一個SHA256 資訊摘要運算對象

1
static Digest hash.sha256(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

sha384

建立一個SHA384 資訊摘要運算對象

1
static Digest hash.sha384(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

sha512

建立一個SHA512 資訊摘要運算對象

1
static Digest hash.sha512(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

ripemd160

建立一個RIPEMD160 資訊摘要運算對象

1
static Digest hash.ripemd160(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

sm3

建立一個SM3 資訊摘要運算對象

1
static Digest hash.sm3(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

建立一個SM3 資訊摘要運算物件並進行預處理

1 2 3
static Digest hash.sm3(PKey pubKey, String id, Buffer data = NULL);

呼叫參數:

  • pubKey:PKey, 簽名公鑰
  • id: String, 簽名ID
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

sha3_256

建立一個SHA3_256 資訊摘要運算對象

1
static Digest hash.sha3_256(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

sha3_384

建立一個SHA3_384 資訊摘要運算對象

1
static Digest hash.sha3_384(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

sha3_512

建立一個SHA3_512 資訊摘要運算對象

1
static Digest hash.sha3_512(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

shake128

建立一個SHAKE128 資訊摘要運算對象

1
static Digest hash.shake128(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

shake256

建立一個SHAKE256 資訊摘要運算對象

1
static Digest hash.shake256(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

keccak256

建立一個KECCAK256 資訊摘要運算對象

1
static Digest hash.keccak256(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

keccak384

建立一個KECCAK384 資訊摘要運算對象

1
static Digest hash.keccak384(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

keccak512

建立一個KECCAK512 資訊摘要運算對象

1
static Digest hash.keccak512(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

blake2s

建立一個BLAKE2S 資訊摘要運算對象

1
static Digest hash.blake2s(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

blake2b

建立一個BLAKE2B 資訊摘要運算對象

1
static Digest hash.blake2b(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

blake2sp

建立一個BLAKE2SP 資訊摘要運算對象

1
static Digest hash.blake2sp(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

blake2bp

建立一個BLAKE2BP 資訊摘要運算對象

1
static Digest hash.blake2bp(Buffer data = NULL);

呼叫參數:

  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac

根據指定的演算法識別建立一個資訊摘要簽名運算對象

1 2 3
static Digest hash.hmac(Integer algo, Buffer key, Buffer data = NULL);

呼叫參數:

  • algo: Integer, 指定摘要運算演算法
  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_md5

建立一個MD5 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_md5(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_sha1

建立一個SHA1 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_sha1(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_sha224

建立一個SHA224 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_sha224(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_sha256

建立一個SHA256 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_sha256(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_sha384

建立一個SHA384 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_sha384(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_sha512

建立一個SHA512 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_sha512(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_ripemd160

建立一個RIPEMD160 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_ripemd160(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_sm3

建立一個SM3 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_sm3(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

建立一個SM3 資訊摘要簽章運算子並進行預處理

1 2 3 4
static Digest hash.hmac_sm3(PKey pubKey, String id, Buffer key, Buffer data = NULL);

呼叫參數:

  • pubKey:PKey, 簽名公鑰
  • id: String, 簽名ID
  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_sha3_256

建立一個SHA3_256 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_sha3_256(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_sha3_384

建立一個SHA3_384 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_sha3_384(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_shake128

建立一個SHAKE128 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_shake128(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_shake256

建立一個SHAKE256 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_shake256(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_sha3_512

建立一個SHA3_512 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_sha3_512(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_keccak256

建立一個KECCAK256 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_keccak256(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_keccak384

建立一個KECCAK384 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_keccak384(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_keccak512

建立一個KECCAK512 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_keccak512(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_blake2s

建立一個BLAKE2S 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_blake2s(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_blake2b

建立一個BLAKE2B 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_blake2b(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_blake2sp

建立一個BLAKE2SP 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_blake2sp(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

hmac_blake2bp

建立一個BLAKE2BP 資訊摘要簽章運算對象

1 2
static Digest hash.hmac_blake2bp(Buffer key, Buffer data = NULL);

呼叫參數:

  • key:Buffer, 二進位簽章金鑰
  • data:Buffer, 建立同時更新的二進位數據,預設為null,不更新數據

回傳結果:

  • Digest, 傳回建構的資訊摘要對象

常量

MD5

MD5 資訊摘要演算法標識常數

1
const hash.MD5 = 1;

SHA1

SHA1 資訊摘要演算法標識常數

1
const hash.SHA1 = 2;

SHA224

SHA224 資訊摘要演算法標識常數

1
const hash.SHA224 = 3;

SHA256

SHA256 資訊摘要演算法標識常數

1
const hash.SHA256 = 4;

SHA384

SHA3​​84 資訊摘要演算法標識常數

1
const hash.SHA384 = 5;

SHA512

SHA512 資訊摘要演算法標識常數

1
const hash.SHA512 = 6;

RIPEMD160

RIPEMD160 資訊摘要演算法標識常數

1
const hash.RIPEMD160 = 7;

SM3

SM3 資訊摘要演算法標識常數

1
const hash.SM3 = 8;

SHA3_256

SHA3​​_256 資訊摘要演算法識別常數

1
const hash.SHA3_256 = 9;

SHA3_384

SHA3​​_384 資訊摘要演算法識別常數

1
const hash.SHA3_384 = 10;

SHA3_512

SHA3​​_512 資訊摘要演算法識別常數

1
const hash.SHA3_512 = 11;

SHAKE128

SHAKE128 資訊摘要演算法識別常數

1
const hash.SHAKE128 = 12;

SHAKE256

SHAKE256 資訊摘要演算法識別常數

1
const hash.SHAKE256 = 13;

KECCAK256

KECCAK256 資訊摘要演算法識別常數

1
const hash.KECCAK256 = 14;

KECCAK384

KECCAK384 資訊摘要演算法識別常數

1
const hash.KECCAK384 = 15;

KECCAK512

KECCAK512 資訊摘要演算法識別常數

1
const hash.KECCAK512 = 16;

BLAKE2S

BLAKE2S 資訊摘要演算法識別常數

1
const hash.BLAKE2S = 17;

BLAKE2B

BLAKE2B 資訊摘要演算法識別常數

1
const hash.BLAKE2B = 18;

BLAKE2SP

BLAKE2SP 資訊摘要演算法識別常數

1
const hash.BLAKE2SP = 19;

BLAKE2BP

BLAKE2BP 資訊摘要演算法識別常數

1
const hash.BLAKE2BP = 20;