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 后缀名判断限制代码
Mar 31 NodeJs
Nodejs Post请求报socket hang up错误的解决办法
Sep 25 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
浅析Nodejs npm常用命令
Jun 14 NodeJs
nodejs进阶(6)—连接MySQL数据库示例
Jan 07 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 NodeJs
详解Nodejs内存治理
May 13 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 NodeJs
NodeJs使用webpack打包项目的方法详解
Feb 28 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
PHP中读写文件实现代码
2011/10/20 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
Javascript 刷新全集常用代码
2009/11/22 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
Python实现的几个常用排序算法实例
2014/06/16 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
关于反爬虫的一些简单总结
2017/12/13 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
简单而又朴实的个人求职信分享
2013/12/12 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
建房协议书
2014/04/11 职场文书
仰望星空观后感
2015/06/10 职场文书
五一晚会主持词
2015/07/01 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书