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全栈框架StrongLoop推荐
Nov 09 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
Nodejs如何复制文件
Mar 09 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
Nodejs 搭建简单的Web服务器详解及实例
Nov 30 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 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获取当前完整URL地址的函数
2014/12/21 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
HTML5实现留言和回复页面样式
2015/07/22 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
flask session组件的使用示例
2018/12/25 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
python 实现性别识别
2020/11/21 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
标准导师推荐信(医学类)
2013/10/28 职场文书
应届毕业生的自我鉴定
2013/11/13 职场文书
事业单位接收函
2014/01/10 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
小学生成绩单评语
2014/12/31 职场文书
2016年教师节感言
2015/12/09 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
分析Python list操作为什么会错误
2021/11/17 Python