nodejs 实现钉钉ISV接入的加密解密方法

这是我开发Worktile钉钉版本的时候遇到的当时感觉比较难的地方,现在写下来方法供大家学习交流

解密方法

rush:js;"> exports.decryptMsg = function (text) { var aes_msg_buffer = new Buffer(text,'base64'); var key = new Buffer(aes_key + "=",'base64'); var iv = key.slice(0,16); var decipher = crypto.createDecipheriv('aes-256-cbc',key,iv); var dec = decipher.write(aes_msg_buffer); dec = decipher.read(); var msg_leng_buffer = dec.slice(16,20); var msg_length = msg_leng_buffer.readInt32BE(); var rand_buffer = dec.slice(20,20 + msg_length); var msg = rand_buffer.toString("utf-8"); var result = JSON.parse(msg); return result; };

加密方法

rush:js;"> exports.encrypt_text = function (text,aes_key,suiteKey) { var key = new Buffer(aes_key + "=",16); var random_buffer = new Buffer(exports.getRandomStr(16),'utf-8'); var buffer = new Buffer(text,'utf-8'); var length_buffer = new Buffer(4); length_buffer.writeUInt32BE(buffer.length,0); var corpidBytes = new Buffer(suiteKey,'utf-8'); var newBuffer = Buffer.concat([random_buffer,length_buffer,buffer,corpidBytes]); var cipher = crypto.createCipheriv('aes-256-cbc',iv); //cipher.write(newBuffer); //var dec = cipher.read(); var cipheredMsg = Buffer.concat([cipher.update(/*encoded*/newBuffer),cipher.final()]); return cipheredMsg.toString('base64'); };

签名方法

rush:js;"> var arr =[token,timestamp,nonce,res_encrypt] //token 是配置钉钉套件的token,timestamp时间戳, nonce随机字符串, res_encrypt是上面加密后的结果 exports.signature_arr = function (arr) { arr.sort(); var str = ""; for (var i = 0; i < arr.length; i++) { str += arr[i]; } var sha1 = crypto.createHash('sha1'); sha1.update(str); var msg_signature = sha1.digest('hex'); return msg_signature; };

以上所述是小编给大家介绍的nodejs 实现钉钉ISV接入的加密解密方法。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...