Closed moshengrenzenme closed 2 years ago
乱码,这样可解
打开文件 lib\api\encrypt\DingTalkEncryptor.js
函数encrypt 和 函数decrypt 中的 CryptoJS.enc.Latin1 改为 CryptoJS.enc.Utf8 即可
async encrypt(random, plainText) { try{ let unEncryptStr=random; unEncryptStr+=Utils.bin2String(Utils.int2Bytes(plainText.length)); unEncryptStr+=plainText; unEncryptStr+=this.corpid; unEncryptStr+=PKCS7Padding.getPaddingBytes(unEncryptStr.length); unEncryptStr=CryptoJS.enc.Utf8.parse(unEncryptStr); const encrypted= CryptoJS.AES.encrypt(unEncryptStr,this.keySpec,this.encryptOption); return encrypted.toString(); }catch(err){ console.log(err); throw new DingTalkEncryptException(900007); } }
async decrypt(encrypted) { let orgText; try{ const decrypted= CryptoJS.AES.decrypt(encrypted,this.keySpec,this.encryptOption); orgText= CryptoJS.enc.Utf8.stringify(decrypted); }catch(err){ console.log(err); throw new DingTalkEncryptException(900008); } let noPad; let networkOrder; let fromCorpid; let planText; try{ noPad= PKCS7Padding.removePaddingBytes(orgText); networkOrder=noPad.substr(16,20); const planTextLength= Utils.bytes2int(Utils.string2Bin(networkOrder)); planText=noPad.substr(20,20+planTextLength); fromCorpid=noPad.substr(20+planTextLength,noPad.length); }catch(err){ console.log(err); throw new DingTalkEncryptException(900009); } if(fromCorpid!==this.corpid){ throw new DingTalkEncryptException(900010); }else{ return planText; } }
Latin1
试了一下,还是不行,感觉像是钉钉的加密和js的加解密用的不太一样,报的Malformed UTF-8 data Error: Malformed UTF-8 data at Object.stringify (node_modules/_crypto-js@3.3.0@crypto-js/core.js:478:24) at DingTalkEncryptor.decrypt (node_modules/_dingtalk-encrypt@1.2.1@dingtalk-encrypt/DingTalkEncryptor.js:65:39) at DingTalkEncryptor.getDecryptMsg (node_modules/_dingtalk-encrypt@1.2.1@dingtalk-encrypt/DingTalkEncryptor.js:129:19)
Latin1
试了一下,还是不行,感觉像是钉钉的加密和js的加解密用的不太一样,报的Malformed UTF-8 data Error: Malformed UTF-8 data at Object.stringify (node_modules/_crypto-js@3.3.0@crypto-js/core.js:478:24) at DingTalkEncryptor.decrypt (node_modules/_dingtalk-encrypt@1.2.1@dingtalk-encrypt/DingTalkEncryptor.js:65:39) at DingTalkEncryptor.getDecryptMsg (node_modules/_dingtalk-encrypt@1.2.1@dingtalk-encrypt/DingTalkEncryptor.js:129:19) 你用得什么框架,如果是eggjs, 可以试试 egg-dd ,你单独提取出来使用也可以,我克隆了一个 egg-dd-corp
Latin1
试了一下,还是不行,感觉像是钉钉的加密和js的加解密用的不太一样,报的Malformed UTF-8 data Error: Malformed UTF-8 data at Object.stringify (node_modules/_crypto-js@3.3.0@crypto-js/core.js:478:24) at DingTalkEncryptor.decrypt (node_modules/_dingtalk-encrypt@1.2.1@dingtalk-encrypt/DingTalkEncryptor.js:65:39) at DingTalkEncryptor.getDecryptMsg (node_modules/_dingtalk-encrypt@1.2.1@dingtalk-encrypt/DingTalkEncryptor.js:129:19) 你用得什么框架,如果是eggjs, 可以试试 egg-dd ,你单独提取出来使用也可以,我克隆了一个 egg-dd-corp
用的是thinkjs,按道理来说两个应该都没问题,就是不知道为啥不行
暂时将中文 encodeURI 编码后再加密
暂时将中文 encodeURI 编码后再加密 问题是这个是钉钉推送的,不是我调用的推送接口
使用 v2.0.0 试试
最新版 v2.0.1 已经发布
推送审批时title会有中文乱码,单重不可读