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


Posted in NodeJs onJanuary 16, 2017

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

解密方法

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;
};

加密方法

exports.encrypt_text = function (text, aes_key, suiteKey) {
 var key = new Buffer(aes_key + "=", 'base64');
 var iv = key.slice(0, 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', key, iv);
 //cipher.write(newBuffer);
 //var dec = cipher.read();
 var cipheredMsg = Buffer.concat([cipher.update(/*encoded*/newBuffer), cipher.final()]);
 return cipheredMsg.toString('base64');
};

签名方法

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接入的加密解密方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

NodeJs 相关文章推荐
nodejs win7下安装方法
May 24 NodeJs
NodeJS的url截取模块url-extract的使用实例
Nov 18 NodeJs
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
Jul 15 NodeJs
nodejs教程之环境安装及运行
Nov 21 NodeJs
NodeJS学习笔记之Http模块
Jan 13 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
nodejs mysql 实现分页的方法
Jun 06 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
简单实现nodejs上传功能
Jan 14 #NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 #NodeJs
NodeJS实现客户端js加密
Jan 09 #NodeJs
nodejs进阶(6)—连接MySQL数据库示例
Jan 07 #NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 #NodeJs
nodejs和php实现图片访问实时处理
Jan 05 #NodeJs
nodejs实例解析(输出hello world)
Jan 03 #NodeJs
You might like
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
Python脚本实现网卡流量监控
2015/02/14 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
大家访活动实施方案
2014/03/10 职场文书
校园公益广告语
2014/03/13 职场文书
房屋租赁意向书
2014/04/01 职场文书
给校长的建议书400字
2014/05/15 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
长城的导游词
2015/01/30 职场文书
五一劳动节慰问信
2015/02/14 职场文书
医学生自荐信范文
2015/03/05 职场文书
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers