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极简入门教程(三):进程
Oct 27 NodeJs
nodejs中转换URL字符串与查询字符串详解
Nov 26 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
NodeJs中的VM模块详解
May 06 NodeJs
nodejs开发——express路由与中间件
Mar 24 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
NodeJs form-data格式传输文件的方法
Dec 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 数组之count 函数
2016/06/13 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
python实现自动登录
2018/09/17 Python
python微信好友数据分析详解
2018/11/19 Python
python:接口间数据传递与调用方法
2018/12/17 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
Python错误的处理方法
2020/06/23 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
拉丁舞学习者的自我评价
2013/10/27 职场文书
中医药大学毕业生自荐信
2013/11/08 职场文书
大学生实习自我鉴定
2013/12/11 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
员工保密承诺书
2014/05/28 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
大班上学期个人总结
2015/02/13 职场文书
中学图书馆工作总结
2015/08/11 职场文书
《春酒》教学反思
2016/02/22 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
Django分页器的用法你都了解吗
2021/05/26 Python
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python