背景

  在与三方系统的对接中,需要生成sign签名,其中使用到了crypto加密、HMAC签名、sha1加密方法。

前言

crypto 模块提供了加密功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。

  先解释一下官网中的代码:

// 引入crypto模块进入项目中
const crypto = require('crypto');// 要加密的字符串
const secret = 'abcdefg';// 调用crypto模块中的createHmac方法,通过sha256算法对明文进行哈希化
const hash = crypto.createHmac('sha256', secret)
// 哈希之后,添加明文I love cupcakes.update('I love cupcakes')
// 将之后的内容进行十六进制的消化吸收                   .digest('hex');
console.log(hash);// 打印:
// c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e

使用

const crypto = require("crypto");
var datas = ["secret_id","phone","app_id","page_id","user_id","extry"]; 
const secret = "abcdefg";// 排序的方法,排序出来的结果:a-z的顺序排序,并且以&符号连接const jsonToUrl = function(dic) {var sdic = dic.sort();var str="";for (let i = 0; i < sdic.length-1; i++) {str+=sdic[i]+"&";          }str += sdic[sdic.length -1];console.log(sdic);            console.log(str);return sdic;   };const hash = crypto.createHmac("sha1", secret).update(jsonToUrl(datas)).digest().toString("hex"); console.log(hash);

结语

  经过这一次的使用,算是对crypto有了基本的认识吧。

参考文献

廖雪峰的官方网站
Node.js v12.13.0 文档
NodeJS 内置模块之crypto