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写的一个简单项目打包工具
May 11 NodeJs
利用NodeJS的子进程(child_process)调用系统命令的方法分享
Jun 05 NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
nodejs中实现修改用户路由功能
May 24 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中数组合并的两种方法及区别介绍
2012/09/14 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
Destoon实现多表查询示例
2014/08/21 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
php跨服务器访问方法小结
2015/05/12 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python 12306抢火车票脚本
2018/02/07 Python
Django model序列化为json的方法示例
2018/10/16 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
linux面试题参考答案(9)
2015/01/07 面试题
数控机械专业个人的自我评价
2014/01/02 职场文书
售后服务承诺书
2014/03/26 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
中秋晚会策划方案
2014/06/12 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
会计岗位职责
2015/02/03 职场文书
公司与个人合作协议书
2016/03/19 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
python分分钟绘制精美地图海报
2022/02/15 Python
Python实现Hash算法
2022/03/18 Python