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服务器(4):路由
Dec 18 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
nodejs中操作mysql数据库示例
Dec 20 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
解决nodejs中使用http请求返回值为html时乱码的问题
Feb 18 NodeJs
详解nodejs中的process进程
Mar 19 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
nodejs前端模板引擎swig入门详解
May 15 NodeJs
详解nodejs内置模块
May 06 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
Python抓取京东图书评论数据
2014/08/31 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
python 性能提升的几种方法
2016/07/15 Python
Python程序中设置HTTP代理
2016/11/06 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
python实现年会抽奖程序
2019/01/22 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
python ChainMap的使用和说明详解
2019/06/11 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
使用Django清空数据库并重新生成
2020/04/03 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
公司业务主管岗位职责
2013/12/07 职场文书
大学生自我鉴定
2013/12/08 职场文书
写自荐信的注意事项
2014/03/09 职场文书
投标邀请书范本
2015/02/02 职场文书
个人培训总结
2015/03/05 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
单位介绍信格式范文
2015/05/04 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
python画条形图的具体代码
2022/04/20 Python