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 sublime text 3安装与配置
Jun 19 NodeJs
nodejs命令行参数处理模块commander使用实例
Sep 17 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
windows系统下更新nodejs版本的方案
Nov 24 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
nodejs简单实现TCP服务器端和客户端的聊天功能示例
Jan 04 NodeJs
nodejs爬虫初试superagent和cheerio
Mar 05 NodeJs
NodeJS安装图文教程
Apr 19 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
nodejs中的异步编程知识点详解
Jan 17 NodeJs
浅谈JS和Nodejs中的事件驱动
May 05 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
js的一些常用方法小结
2011/06/29 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
python list中append()与extend()用法分享
2013/03/24 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
python读取文本中的坐标方法
2018/10/14 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
python实现udp聊天窗口
2020/03/31 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
全国税务系统先进集体事迹材料
2014/05/19 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
房屋认购协议书
2015/01/29 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python
2022漫威和DC电影上映作品
2022/04/05 欧美动漫