nodejs 实现钉钉ISV接入的加密解密方法
这是我开发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);
//vardec=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;
};
以上所述是小编给大家介绍的nodejs实现钉钉ISV接入的加密解密方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!