两端异构情况下,nodejs端RSA加密解密要点

已有服务器使用的是ASP.net进行RSA加密,
新服务器使用koa2,
加密后的结果使用nodejs自带的crypto和node-rsa均无法解密,
原因未明。
试用多个组件后,发现node-jsencrypt的加密解密结果可以通用。
故特意记录。
简单的解密流程:

const JSEncrypt = require("node-jsencrypt"); const PUBLICKEY = `-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCFSws2t8RQ8IlrXQmkE7lOYQ5h Xya+HdXrBDh5zGv3+suPEj8K+sLuPfsGCRC6VbyKkzwGECNrzwOPWTx7szHMp4Ou IRCe8wEyV2TAri7eRukgelXVG4Fh4F1jS14jdWeTfRXFxygkkGTyCvKbWzm9Hp93 fNKDHuB+bTvRS9YMuwIDAQAB -----END PUBLIC KEY-----`; //公钥 const rsaEncrypt = `密文`; let jsencrypt = new JSEncrypt(); jsencrypt.setPrivateKey(PRIVATEKEY); let decrypt = jsencrypt.decrypt(rsaEncrypt)

字符串长度超过117时,该组件就不能直接解密,如果超长字符串加密,需要进行分割处理
长字符串的加密处理:
//分割 if (querystr.length > 117) { let cnt = Number.parseInt(querystr.length / 117) + 1; ori_slice.push(querystr.slice(0, len_max)) for (let i = 1; i < cnt; i++) { const _slice = querystr.slice(len_max * i).trim(); if (_slice.length > 0) { ori_slice.push(querystr.slice(len_max * i)); } } }

//加密并组合 let encrypt_list = ori_slice.map(i => { let jsencrypt = new JSEncrypt(); jsencrypt.setPublicKey(PUBLICKEY); let encrypt = jsencrypt.encrypt(i); return encrypt; }); let encrypt_query = encrypt_list.join('::'); //以::双冒号划分

【两端异构情况下,nodejs端RSA加密解密要点】解密时,分段解密并拼接即可

    推荐阅读