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 25 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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中使用全局变量的几种方法
2013/06/24 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
python3中zip()函数使用详解
2018/06/29 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Django框架实现的分页demo示例
2019/05/25 Python
django-allauth入门学习和使用详解
2019/07/03 Python
python3获取当前目录的实现方法
2019/07/29 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
浅析Python中字符串的intern机制
2020/10/03 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
银行职业规划书范文
2013/12/28 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
低碳环保演讲稿
2014/08/28 职场文书
个人投资合作协议书
2014/10/12 职场文书
行政处罚告知书
2015/07/01 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
Python机器学习之基础概述
2021/05/19 Python
vue递归实现树形组件
2022/07/15 Vue.js
js 实现验证码输入框示例详解
2022/09/23 Javascript