zoukankan      html  css  js  c++  java
  • 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}))
    
  • 相关阅读:
    5.19 省选模拟赛 T1 小B的棋盘 双指针 性质
    5.15 省选模拟赛 容斥 生成函数 dp
    5.15 省选模拟赛 T1 点分治 FFT
    5.15 牛客挑战赛40 B 小V的序列 关于随机均摊分析 二进制
    luogu P4929 【模板】舞蹈链 DLX
    CF 878E Numbers on the blackboard 并查集 离线 贪心
    5.10 省选模拟赛 拍卖 博弈 dp
    5.12 省选模拟赛 T2 贪心 dp 搜索 差分
    5.10 省选模拟赛 tree 树形dp 逆元
    luogu P6088 [JSOI2015]字符串树 可持久化trie 线段树合并 树链剖分 trie树
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/14199879.html
Copyright © 2011-2022 走看看