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写的一个简单项目打包工具
May 11 NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
Apr 27 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
NodeJS实现同步的方法
Mar 02 NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 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写的serv-u的web申请账号的程序
2006/10/09 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
JavaScript 函数式编程的原理
2009/10/16 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
JavaScript知识点整理
2015/12/09 Javascript
js date 格式化
2017/02/15 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
Python+Opencv识别两张相似图片
2020/03/23 Python
便捷提取python导入包的属性方法
2018/10/15 Python
python使用matplotlib绘制热图
2018/11/07 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
美国眼镜网站:LensCrafters
2020/01/19 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
新闻编辑自荐信
2013/11/03 职场文书
预备党员承诺书
2014/03/25 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
生物技术专业求职信
2014/06/10 职场文书
植树节口号
2014/06/21 职场文书
微笑服务标语
2014/06/24 职场文书
作风建设年活动总结
2014/08/27 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
2015年大学生实习评语
2015/03/25 职场文书
四风之害观后感
2015/06/09 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书