当前位置: 首页 > 后端技术 > Node.js

Node.js-Vue.js使用jsSHA库进行SHA1-2-3加密

时间:2023-04-03 18:22:18 Node.js

1概述jsSHA是一个使用JS+TS实现完整系列SHA加密算法的加密库,包括:SHA1SHA-224/256/384/512SHA3-224/256/384/512SHAKE128/256cSHAKE128/256KMAC128/256官方Github在这里,目前有2kstars,这里是一些使用加密算法的例子。2安装和导入使用npm或cnpm安装时:npminstall--savejssha#或cnpminstall--savejssha,根据package.json中的type导入:constjsSHA=require("jssha")//commonjsimportjsSHAfrom"jssha"//如果模块是"type":"commonjs",useconstjsSHA=require("jssha")3hash一个简单的例子如下:constjsSHA=require("jssha")constshaObj=newjsSHA("SHA-512","TEXT",{encoding:"UTF8"})shaObj.update("test")console.log(shaObj.getHash("HEX"))先声明一个shaObj,通过update传过去明文,通过getHash("HEX")获取哈希值。另外update可以多次调用,最后使用getHash。jsSHA()有三个参数:哈希算法、输入格式和参数设置(可选)。3.1hash算法第一个参数为hash算法,支持的算法如下: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是SecureHashAlgorithm和KECCAK的缩写,定义在FISP202标准中,类似于SHA-3,但输出是无限的。所以在定义的时候需要指定输出位数,否则会出现如下错误:给getHash加上参数即可:constjsSHA=require("jssha")constshaObj=newjsSHA("SHAKE128","TEXT",{encoding:"UTF8"})shaObj.update("test")console.log(shaObj.getHash("HEX",{outputLen:1024}))3.2输入格式输入格式的值如下:HEXTEXTB64BYTESARRAYBUFFERUNIT8ARRAY3.3参数选项一般常用的有两个:encoding:编码,允许取值UTF8/UTF16BE/UTF16LEnumRounds:哈希轮数其他参数可以查看源码。3.4getHashgetHash是获取哈希结果的函数,第一个参数可以是:HEXB64BYTESUINT8ARRAYARRAYBUFFER对应上面的输入格式,可以带上输出长度选项,对于HEX可以带上outputUpper表示是否大写:4HMACHMAC是基于散列的函数和消息认证的密钥,使用时需要指定密钥:constjsSHA=require("jssha")constshaObj=newjsSHA("SHA3-512","TEXT",{hmacKey:{value:'secretkey',format:'TEXT'}})shaObj.update("test")console.log(shaObj.getHash("HEX"))5cSHAKEcSHAKE可以看作是SHAKE的“定制版”,这需要额外的自定义参数:constjsSHA=require("jssha")constshaObj=newjsSHA("CSHAKE128","TEXT",{customization:{value:"test",format:"TEXT"}})shaObj.update("test")console.log(shaObj.getHash("HEX",{outputLen:1024}))6KMACKMAC(KECCAKMessageAuthenticationCode)是基于KECCAK的算法,需要提供kmacKey`参数:constjsSHA=require("jssha")constshaObj=newjsSHA("KMAC128","TEXT",{kmacKey:{value:"secretkey",format:"TEXT"}})shaObj.update("test")console.log(shaObj.getHash("HEX",{outputLen:1024}))