HMAC算法是将散列算法与一个密钥结合在一起,以阻止对签名完整性破坏,其实就是类似于上面的提到的md5密码中加盐道理是类似的。 使用HMAC算法前,我们使用createHmac方法创建一个hmac对象,创建方法如下所示:
crypto.createHmac(params, key);
该方法中使用两个参数,第一个参数含义是在Node.js中使用的算法,比如'sha1', 'md5', 'sha256', 'sha512'等等,该方法返回的是hmac对象。 key参数值为一个字符串,用于指定一个PEM格式的密钥。
在创建完成hmac对象后,我们也是一样使用一个update方法来创建一个摘要,该方法使用如下所示:
hmac.update(data);
在update方法中,使用一个参数,其参数值为一个Buffer对象或一个字符串,用于指定摘要内容。也是一样可以在被输出之前使用多次update方法来添加摘要内容。
最后一步就是 使用hmac对象的digest方法来输出摘要内容了;在使用hmac对象的digest方法后,不能再向hmac对象中追加摘要内容,也就是说你使用了digest方法作为输出后,因此是不能向hmac对象中追加内容。使用方法如下:
hmac.digest([encoding]);
该方法有一个参数,该参数是一个可选值,表示的意思是 用于指定输出摘要的编码格式,可指定参数值为 'hex', 'binary', 及 'base64'. 如果使用了该参数,那么digest方法返回字符串格式的摘要内容,如果不使用该参数,那么digest方法返回一个是Buffer对象。
如下使用一个简单的demo:
代码语言:javascript复制const crypto = require('crypto');
// 创建一个hmac对象
const hmac = crypto.createHmac('md5', 'abc');
// 往hmac对象中添加摘要内容
const up = hmac.update('123456');
// 使用 digest 方法输出摘要内容
const result = up.digest('hex');
console.log(result); // 8c7498982f41b93eb0ce8216b48ba21d
以上便是hmac加密方式的解析,希望对你有所帮助。