1 概述

jsSHA是一个用JS+TS实现残缺SHA系列加密算法的加密库,包含:

  • SHA1
  • SHA-224/256/384/512
  • SHA3-224/256/384/512
  • SHAKE128/256
  • cSHAKE128/256
  • KMAC128/256

官网Github戳这里,目前已有2k的star,这里是一些应用加密算法的例子。

2 装置并引入

装置应用npmcnpm

npm install --save jssha# 或cnpm install --save jssha

引入时,依据package.json中的type进行相应引入:

const jsSHA = require("jssha") //commonjsimport jsSHA from "jssha"      //module

若为

"type":"commonjs"

则应用

const jsSHA = require("jssha")

3 哈希

一个简略的例子如下:

const jsSHA = require("jssha")const shaObj = new jsSHA("SHA-512","TEXT",{encoding:"UTF8"})shaObj.update("test")console.log(shaObj.getHash("HEX"))

首先申明了一个shaObj,通过update传递明文,并通过getHash("HEX")即失去哈希值,另外update能够调用屡次,最初应用getHash即可。

jsSHA()有三个参数:哈希算法、输出格局以及参数设置(可选)。

3.1 哈希算法

第一个参数是哈希算法,反对的算法如下:

  • SHA-1
  • SHA-224
  • SHA-256
  • SHA-384
  • SHA-512
  • SHA3-224
  • SHA3-256
  • SHA3-384
  • SHA3-512
  • SHAKE128
  • SHAKE256

目前不倡议应用SHA-1,倡议应用SHA-2SHA-224、256/384/512)或SHA-3SHA3-224/256/384/512)。

SHAKESecure Hash Algorithm and KECCAK的缩写,在FISP 202规范中定义,与SHA-3相似,然而输入是有限位数的。因而定义的时候须要指定输入的位数,不然的话会失去如下报错:

getHash中加上参数即可:

const jsSHA = require("jssha")const shaObj = new jsSHA("SHAKE128","TEXT",{encoding:"UTF8"})shaObj.update("test")console.log(shaObj.getHash("HEX",{outputLen:1024}))

3.2 输出格局

输出格局的取值如下:

  • HEX
  • TEXT
  • B64
  • BYTES
  • ARRAYBUFFER
  • UNIT8ARRAY

3.3 参数选项

个别罕用两个:

  • encoding:编码,容许取值UTF8/UTF16BE/UTF16LE
  • numRounds:哈希轮数

其余的参数能够查看源码。

3.4 getHash

getHash是获取哈希后果的函数,第一个参数能够是:

  • HEX
  • B64
  • BYTES
  • UINT8ARRAY
  • ARRAYBUFFER

与下面的输出格局对应,能够带上输入长度选项,对于HEX能够带上outputUpper示意是否大写:

4 HMAC

HMAC是一种基于哈希函数和密钥进行音讯认证的办法,应用时须要指定密钥:

const jsSHA = require("jssha")const shaObj = new jsSHA("SHA3-512","TEXT",{    hmacKey:{value:'secret key',format:'TEXT'}})shaObj.update("test")console.log(shaObj.getHash("HEX"))

5 cSHAKE

cSHAKE能够看作一个"定制版"的SHAKE,须要应用额定的customization参数:

const jsSHA = require("jssha")const shaObj = new jsSHA("CSHAKE128","TEXT",{    customization:{value:"test",format:"TEXT"}})shaObj.update("test")console.log(shaObj.getHash("HEX",{outputLen:1024}))

6 KMAC

KMACKECCAK Message Authentication Code)是一个基于KECCAK的算法,须要提供 kmacKey`参数:

const jsSHA = require("jssha")const shaObj = new jsSHA("KMAC128","TEXT",{    kmacKey:{value:"secret key",format:"TEXT"}})shaObj.update("test")console.log(shaObj.getHash("HEX",{outputLen:1024}))