背景
在与三方系统的对接中,需要生成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有了基本的认识吧。