当前位置: 首页 > 后端技术 > Node.js

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

时间:2023-04-03 10:49:37 Node.js

现有服务器使用ASP.net进行RSA加密,新服务器使用koa2。解密,原因不明。尝试多个组件后发现node-jsencrypt的加解密结果可以通用。是故意记录的。简单的解密流程:constJSEncrypt=require("node-jsencrypt");constPUBLICKEY=`-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCFSws2t8RQ8IlrXQmkE7lOYQ5hXya+HdXrBDh5zGv3+suPEj8K+sLuPfsGCRC6VbyKkzwGECNrzwOPWTx7szHMp4OuIRCe8wEyV2TAri7eRukgelXVG4Fh4F1jS14jdWeTfRXFxygkkGTyCvKbWzm9Hp93fNKDHuB+bTvRS9YMuwIDAQAB-----ENDPUBLICKEY-----`;//公钥constrsaEncrypt=`ciphertext`;让jsencrypt=newJSEncrypt();jsencrypt.setPrivateKey(PRIVATEKEY);letdecrypt=jsencrypt.decrypt(rsaEncrypt)当字符串长度超过117时,该组件无法直接解密。如果超长字符串被加密,需要进行拆分处理,对长字符串进行加密://Splitif(querystr.length>117){letcnt=Number.parseInt(querystr.length/117)+1;ori_slice.push(querystr.slice(0,len_max))for(leti=1;i0){ori_slice.push(querystr.slice(len_max*i));}}}//加密合并letencrypt_list=ori_slice.map(i=>{letjsencrypt=newJSEncrypt();jsencrypt.setPublicKey(PUBLICKEY);letencrypt=jsencrypt.encrypt(i);返回加密;});letencrypt_query=encrypt_list.join('::');//用::双冒号解密时,可以解密拼接段