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 相关文章推荐
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
nodeJs内存泄漏问题详解
Sep 05 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
深入理解nodejs中Express的中间件
May 19 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs socket服务端和客户端简单通信功能
Sep 14 NodeJs
原生nodejs使用websocket代码分享
Apr 07 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
nodejs二进制与Buffer的介绍与使用
Jul 11 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
建站常用13种PHP开源CMS比较
2009/08/23 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
python删除不需要的python文件方法
2018/04/24 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
Python pip使用超时问题解决方案
2020/08/03 Python
韩国现代百货官网:Hmall
2018/03/21 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
《一个小村庄的故事》教学反思
2014/04/13 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
利用javaScript处理常用事件详解
2021/04/14 Javascript
golang 在windows中设置环境变量的操作
2021/04/29 Golang
MySQL创建管理KEY分区
2022/04/13 MySQL