Node.js/Vue.js使用jsSHA库进行SHA1/2/3加密
1 概述
jsSHA是一个用JS+TS实现完整SHA系列加密算法的加密库,包括:
SHA1SHA-224/256/384/512SHA3-224/256/384/512SHAKE128/256cSHAKE128/256KMAC128/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-1SHA-224SHA-256SHA-384SHA-512SHA3-224SHA3-256SHA3-384SHA3-512SHAKE128SHAKE256
目前不建议使用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 输入格式
输入格式的取值如下:
HEXTEXTB64BYTESARRAYBUFFERUNIT8ARRAY
3.3 参数选项
一般常用两个:
encoding:编码,允许取值UTF8/UTF16BE/UTF16LEnumRounds:哈希轮数
其他的参数可以查看源码。
3.4 getHash
getHash是获取哈希结果的函数,第一个参数可以是:
HEXB64BYTESUINT8ARRAYARRAYBUFFER
与上面的输入格式对应,可以带上输出长度选项,对于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}))
Node.js/Vue.js使用jsSHA库进行SHA1/2/3加密的更多相关文章
- node npm vue.js 笔记
cnpm 下载包的速度更快一些. 地址:http://npm.taobao.org/ 安装cnpm: npm install -g cnpm --registry=https://registry.n ...
- SpringBoot+Activiti+bpmn.js+Vue.js+Elementui(OA系统审批流)
引言:OA系统用到请假.加班.调休.离职,需要使用工作流进行流程审批 一:activiti流程设计器的选择(通过学习activiti工作流过程中,发现一款好的流程设计器将会更好的方便的设计好流程(主要 ...
- 项目公共js(vue.js)
var urlHead = "http://hm.runorout.com/";// var urlHead = "/";/*加入跑班相关*/var urlGe ...
- Awesome Vue.js vue.js学习资源链接大全 中文
https://blog.csdn.net/caijunfen/article/details/78216868
- Vue.js 运行环境搭建详解(基于windows的手把手安装教学)及vue、node基础知识普及
Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架——只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动 ...
- 前端之Vue.js库的使用
vue.js简介 Vue.js读音 /vjuː/, 类似于 view Vue.js是前端三大新框架:Angular.js.React.js.Vue.js之一,Vue.js目前的使用和关注程度在三大框架 ...
- vue.js和node.js的认识
首先vue.js 是库,不是框架,不是框架,不是框架. Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. Vue.js 的核心是一个允许你 ...
- 非node环境下的vue.js 实现简单的购物车计算功能 样式请无视
都说vue的双向数据绑定好用,自己用了下,感觉做购物车没想象中好用.自己的实现如下: <!DOCTYPE html> <html lang="en"> &l ...
- vue.js之组件(上篇)
本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星! https://github.com/zwl-jasmine95/Vue_test 以下所有知 ...
随机推荐
- 消息中间件选型分析:从 Kafka 与 RabbitMQ 的对比看全局
本文转载自消息中间件选型分析:从 Kafka 与 RabbitMQ 的对比看全局 前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布 ...
- oracle之用户
命令都是在命令行窗口执行 创建用户 1)登陆管理员用户 sqlplus system/密码 sqlplus system/briup 注意不要以分号结尾 2)创建用户 create user 用户名 ...
- mybites框架遇到的坑之Mapper.xml文件不要随意加注释和ORA-00911
原文链接:https://blog.csdn.net/streetlight8023/article/details/69388495/ 先说解决方法: org.mybatis.spring.MyBa ...
- easyPOI基本用法
参考网址:http://www.wupaas.com/ 1.Excel文件的导入导出 项目源码:后台:https://github.com/zhongyushi-git/easypoi-demo-ad ...
- 用脚手架搭建一个 vue 项目
一.需要安装 node 环境 下载地址: https://nodejs.org/en/ 中文网: http://nodejs.cn/ 安装后为方便国内使用,可以把 npm 换成 taobao 的 cn ...
- PVE更新WEB管理地址
PVE也是一台Linux系统,如果PVE更换了网络环境,比如从家里拿到了办公室,那么就需要对其更新网络,才能让其它机器访问到它的8006管理地址. 具体做法是通过修改配置文件来更改IP. 更新网卡配置 ...
- ProBuilder快速原型开发技术 ---不规则模型与材质
ProBuilder开发模型的强大之处,还在于可以按照要求精确定制不规则模型.克隆镜像模型.给模型着色以及添加材质等,下面笔者就这几方面进行讲解. 一:定制不规则模型 PB有一个专门定制不规则模型的功 ...
- PAT-1133(Splitting A Linked List)vector的应用+链表+思维
Splitting A Linked List PAT-1133 本题一开始我是完全按照构建链表的数据结构来模拟的,后来发现可以完全使用两个vector来解决 一个重要的性质就是位置是相对不变的. # ...
- 一文读懂Java动态代理
作者 :潘潘 日期 :2020-11-22 事实上,对于很多Java编程人员来说,可能只需要达到从入门到上手的编程水准,就能很好的完成大部分研发工作.除非自己强主动获取,或者工作倒逼你学习,否则我们好 ...
- Python 第三方登录 实现QQ 微信 微博 登录
本人写的AgentLogin,能快速返回QQ.微信.微博第三方用户名信息,主要用于快速登录 用 pip命令安装 pip install AgentLogin 用法 : 导入这个包 from Agent ...