Closed simon5057 closed 8 months ago
同 你解决了吗
同 你解决了吗
const crypto = createDecipheriv('AES-256-CBC', this.keySpec, this.iv); // this.keySpec 和 this.iv 均使用 buffer,如果使用字符串会报错 decrypt = crypto.update(Buffer.from(encrypted, 'base64')); // crypto.final(); // TODO 会报错,原因未知
- this.keySpec 和 this.iv 均使用 buffer,如果使用字符串会报错
- 然后不调用 crypto.final(); 因为会报错,但是解出来的数据不完整
问题同上,就是报错,不知道为什么,可以修复下吗?
已解决
const crypto = createDecipheriv('AES-256-CBC', this.keySpec, this.iv); // this.keySpec 和 this.iv 均使用 buffer,如果使用字符串会报错
crypto.setAutoPadding(false);//如果不加这个,在解密钉钉加密信息的时候final()容易出错
return Buffer.concat([crypto.update(finalBuf), crypto.final()]).toString('base64');
回退到1.2.3版本就正常了
试用 2.1.0 看看
Crypto.createDecipheriv 调用时出错, Error: Invalid IV length at Decipheriv.createCipherBase (internal/crypto/cipher.js:103:19) at Decipheriv.createCipherWithIV (internal/crypto/cipher.js:121:20) at new Decipheriv (internal/crypto/cipher.js:264:22) at Object.createDecipheriv (crypto.js:132:10) at DingTalkEncryptor.decrypt
在使用钉钉第三方应用程序回调设置的对应 token 和 aseKey,并使用检查回调时传入的参数进行解密,
throw new DingTalkEncryptException(900008);
,经过调试 try 语块报错如上,请您排查一下,谢谢