这是我开发Worktile钉钉版本的时候遇到的当时感觉比较难的地方,现在写下来方法供大家学习交流
解密方法
rush:js;">
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;
};
加密方法
rush:js;">
exports.encrypt_text = function (text,aes_key,suiteKey) {
var key = new Buffer(aes_key + "=",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',iv);
//cipher.write(newBuffer);
//var dec = cipher.read();
var cipheredMsg = Buffer.concat([cipher.update(/*encoded*/newBuffer),cipher.final()]);
return cipheredMsg.toString('base64');
};
签名方法
rush:js;">
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接入的加密解密方法。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。
原文地址:https://www.jb51.cc/nodejs/42478.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。