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实现的一个静态服务器实例
Dec 06 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
nodejs基础之buffer缓冲区用法分析
Dec 26 NodeJs
关于NodeJS中的循环引用详解
Jul 23 NodeJs
nodejs中的异步编程知识点详解
Jan 17 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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
php网站地图生成类示例
2014/01/13 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
php文件上传的两种实现方法
2016/04/04 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
改版了网上的一个js操作userdata
2007/04/27 Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
详解Python3序列赋值、序列解包
2019/05/14 Python
python提取log文件内容并画出图表
2019/07/08 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
党员自我批评与反省材料
2014/02/10 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
师德标兵事迹材料
2014/12/19 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
2015年路政工作总结
2015/05/22 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书