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}))