Node.js/Vue.js使用jsSHA庫進行SHA1/2/3加密

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") //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-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}))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章