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文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
Nodejs极简入门教程(三):进程
Oct 27 NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
nodejs高大上的部署方式(PM2)
Sep 11 NodeJs
如何利用nodejs实现命令行游戏
Nov 24 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中与数组相关的函数
2007/03/22 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
js继承实现方法详解
2016/12/16 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
[52:00]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs Optic
2018/04/02 DOTA
Python使用pymysql小技巧
2017/06/04 Python
用Eclipse写python程序
2018/02/10 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python 实现一个计时器
2020/07/28 Python
python归并排序算法过程实例讲解
2020/11/04 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
python中常用的数据结构介绍
2021/01/12 Python
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
教师个人自我鉴定
2014/02/08 职场文书
主题团日活动总结
2014/06/25 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
出生公证书
2015/01/23 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
董事长开业致辞
2015/07/29 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
靠谱的活动总结
2019/04/16 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
python中super()函数的理解与基本使用
2021/08/30 Python
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技