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中利用Promise来封装异步函数
Feb 25 NodeJs
nodejs修复ipa处理过的png图片
Feb 17 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
用nodeJS搭建本地文件服务器的几种方法小结
Mar 16 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
详解nodejs http请求相关总结
Mar 31 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 NodeJs
nodejs利用readline提示输入内容实例代码
Jul 15 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
搜索引擎技术核心揭密
2006/10/09 PHP
PHP伪静态页面函数附使用方法
2008/06/20 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
javascript入门基础之私有变量
2010/02/23 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
Python中字典和JSON互转操作实例
2015/01/19 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
Python爬虫中urllib库的进阶学习
2018/01/05 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
Django实现随机图形验证码的示例
2020/10/15 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
财政局长自荐信范文
2013/12/22 职场文书
迟到检讨书1000字
2014/01/15 职场文书
党风廉政承诺书
2014/03/27 职场文书
贷款承诺书范文
2014/05/19 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
公司辞职信模板
2015/05/13 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏