共计 2028 个字符,预计需要花费 6 分钟才能阅读完成。
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 装置并引入
装置应用 npm
或cnpm
:
npm install --save jssha
# 或
cnpm install --save jssha
引入时,依据 package.json
中的 type
进行相应引入:
const jsSHA = require("jssha") //commonjs
import 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-2
(SHA-224、256/384/512
)或SHA-3
(SHA3-224/256/384/512
)。
而 SHAKE
是Secure 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
KMAC
(KECCAK 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}))