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的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 NodeJs
ajax +NodeJS 实现图片上传实例
Jun 06 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
Windows下使用Nodejs运行js的方法
Sep 02 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 03 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
session 的生命周期是多长
2006/10/09 PHP
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
php实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
php文件上传的两种实现方法
2016/04/04 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
2015/12/29 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
Python中的默认参数详解
2015/06/24 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
Python装饰器语法糖
2019/01/02 Python
对Django url的几种使用方式详解
2019/08/06 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
python程序输出无内容的解决方式
2020/04/09 Python
python实现批量转换图片为黑白
2020/06/16 Python
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
离婚案件原告代理词
2015/05/23 职场文书
环保建议书作文500字
2015/09/14 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python