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的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
nodejs实现获取某宝商品分类
May 28 NodeJs
nodejs redis 发布订阅机制封装实现方法及实例代码
Dec 15 NodeJs
详解nodejs 文本操作模块-fs模块(五)
Dec 23 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
配置nodejs环境的方法
May 13 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
NVM安装nodejs的方法实用步骤
Jan 16 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
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php常见的魔术方法详解
2014/12/25 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
Zabbix实现微信报警功能
2016/10/09 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
Python实现SMTP邮件发送
2020/06/16 Python
2019年Java 最常见的 面试题
2016/10/19 面试题
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
商务英语毕业生自荐信范文
2013/11/08 职场文书
市场营销专科应届生求职信
2013/11/24 职场文书
少先队入队活动方案
2014/02/08 职场文书
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
投标承诺书范本
2014/03/27 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
查摆剖析材料范文
2014/09/30 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
Python中else的三种使用场景
2021/06/16 Python