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

Node.js/Vue.js使用jsSHA库进行SHA1/2/3加密的更多相关文章

  1. node npm vue.js 笔记

    cnpm 下载包的速度更快一些. 地址:http://npm.taobao.org/ 安装cnpm: npm install -g cnpm --registry=https://registry.n ...

  2. SpringBoot+Activiti+bpmn.js+Vue.js+Elementui(OA系统审批流)

    引言:OA系统用到请假.加班.调休.离职,需要使用工作流进行流程审批 一:activiti流程设计器的选择(通过学习activiti工作流过程中,发现一款好的流程设计器将会更好的方便的设计好流程(主要 ...

  3. 项目公共js(vue.js)

    var urlHead = "http://hm.runorout.com/";// var urlHead = "/";/*加入跑班相关*/var urlGe ...

  4. Awesome Vue.js vue.js学习资源链接大全 中文

    https://blog.csdn.net/caijunfen/article/details/78216868

  5. Vue.js 运行环境搭建详解(基于windows的手把手安装教学)及vue、node基础知识普及

    Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架——只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动 ...

  6. 前端之Vue.js库的使用

    vue.js简介 Vue.js读音 /vjuː/, 类似于 view Vue.js是前端三大新框架:Angular.js.React.js.Vue.js之一,Vue.js目前的使用和关注程度在三大框架 ...

  7. vue.js和node.js的认识

    首先vue.js 是库,不是框架,不是框架,不是框架. Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. Vue.js 的核心是一个允许你 ...

  8. 非node环境下的vue.js 实现简单的购物车计算功能 样式请无视

    都说vue的双向数据绑定好用,自己用了下,感觉做购物车没想象中好用.自己的实现如下: <!DOCTYPE html> <html lang="en"> &l ...

  9. vue.js之组件(上篇)

    本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星! https://github.com/zwl-jasmine95/Vue_test 以下所有知 ...

随机推荐

  1. Java HashMap源码分析(含散列表、红黑树、扰动函数等重点问题分析)

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  2. 两年Java,去字节跳动写Python和Go

    前言 2019年5月,在收到offer邮件的那一刻,我仍然不敢相信自己这一番际遇.经历了七场面试,终于得偿所望,拿到了字节跳动的offer. 做加入大厂的决定并不是巧合.在多年的职业生涯里,我曾多次对 ...

  3. JDBC概念理解

    ##JDBC: 概念:Java DataBase Connectivity  Java 数据库连接  Java语言操作数据库 JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则 ...

  4. Snort + Barbyard2 + Snorby环境搭建

    1.环境 ubuntu-14.04.5 daq-2.0.7 Snort-2.9.15.1 Barbyard2 snorby Mysql Docker 2.架构 3.安装步骤 Ubuntu配置 如果是刚 ...

  5. 简述Python垃圾回收机制和常量池的验证

    目录 通过代码验证python解释器内部使用了常量池 Python的引入 变量的引入 为什么要有变量 定义变量 常量引入 常量池引入 Python解释器 Python变量存储机制 Python垃圾回收 ...

  6. 漏洞复现-CVE-2017-4971-Spring Web Flow 远程代码执行

            0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)(兼顾反弹shell的攻击机) 0x01 影响版本 Spring ...

  7. windows电脑上传ipa到appstore的详细流程

    在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布. 但是在苹果开发者中心无法直接上传ipa文件,它要求我们使用xcode或transpo ...

  8. 001-HashMap源码分析

    HashMap源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如 memcached)的核心其实就是在内存中维护一张大的哈希表. 一.什 ...

  9. 解决图片把父元素向下撑大大约3px问题

    现象  bug: 图片在div\li\dt 等  图片把父元素向下撑大大约3px  <style>         img {             width: 30%; //这里由于 ...

  10. dex、apk完整性校验

    对Dex进行完整性的检查,可通过CRC,或者Hash值.可将校验值放到String资源文件里,或者放到服务器中. 在代码中完成校验值对比逻辑,此部分代码后续不能再改变,否则CRC值会发生变化: 从生成 ...