一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

nodejs实现钉钉ISV接入的加密解密方法

时间:2017-02-04 编辑:简简单单 来源:一聚教程网

这是我开发Worktile钉钉版本的时候遇到的当时感觉比较难的地方,现在写下来方法供大家学习交流

解密方法

 代码如下 复制代码

exports.decryptMsg =function(text) {

 varaes_msg_buffer =newBuffer(text,'base64');

 varkey =newBuffer(aes_key +"=",'base64');

 variv = key.slice(0, 16);

 vardecipher = crypto.createDecipheriv('aes-256-cbc', key, iv);

 vardec = decipher.write(aes_msg_buffer);

 dec = decipher.read();

 varmsg_leng_buffer = dec.slice(16, 20);

 varmsg_length = msg_leng_buffer.readInt32BE();

 varrand_buffer = dec.slice(20, 20 + msg_length);

 varmsg = rand_buffer.toString("utf-8");

 varresult = JSON.parse(msg);

 returnresult;

};

加密方法

 代码如下 复制代码

exports.encrypt_text =function(text, aes_key, suiteKey) {

 varkey =newBuffer(aes_key +"=",'base64');

 variv = key.slice(0, 16);

 varrandom_buffer =newBuffer(exports.getRandomStr(16),'utf-8');

 varbuffer =newBuffer(text,'utf-8');

 varlength_buffer =newBuffer(4);

 length_buffer.writeUInt32BE(buffer.length, 0);

 varcorpidBytes =newBuffer(suiteKey,'utf-8');

 varnewBuffer = Buffer.concat([random_buffer, length_buffer, buffer, corpidBytes]);

 varcipher = crypto.createCipheriv('aes-256-cbc', key, iv);

 //cipher.write(newBuffer);

 //var dec = cipher.read();

 varcipheredMsg = Buffer.concat([cipher.update(/*encoded*/newBuffer), cipher.final()]);

 returncipheredMsg.toString('base64');

};

签名方法

 代码如下 复制代码

vararr =[token, timestamp, nonce, res_encrypt]//token 是配置钉钉套件的token,timestamp时间戳, nonce随机字符串, res_encrypt是上面加密后的结果

exports.signature_arr =function(arr) {

 arr.sort();

 varstr ="";

 for(vari = 0; i < arr.length; i++) {

  str += arr[i];

 }

 varsha1 = crypto.createHash('sha1');

 sha1.update(str);

 varmsg_signature = sha1.digest('hex');

 returnmsg_signature;

};

热门栏目