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接入的加密解密方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!