军哥哥傻乎乎 發表於 2021-6-25 17:32:00

uni-app app vue 小程序 RSA 加密/解密 使用 jsencrypt 踩坑(Message too long for RSA/Cannot read property 'appName')(一)

<p>老弟的APP最近要重新改造,数据传输这一块要进行加密(虽然APP能反编译...不过有总比没有好)。</p>
<p>他后台用的是RSA加密,需要我uniapp的前端进行数据解密。</p>
<p>那就……开工吧:</p>
<p>&nbsp;</p>
<p>【尝试一】</p>
<p>教程地址:&nbsp;<span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)">https://www.cnblogs.com/sunnycc/p/13448670.html</span></span></p>
<p>&nbsp;</p>
<p>把js下载下来,引入:</p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622150618709-284395096.png"></p>
<p>然后运行项目,结果发现报错:<span style="color: rgba(255, 0, 0, 1)"><strong>Cannot read property 'appName'</strong></span></p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622150704221-2012224169.png"></p>
<p>&nbsp;</p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">原因:该教程里的jsencrypt.js,不是vue版本,window等关键字都存在,不报错才怪!</span></strong></p>
<p>&nbsp;</p>
<p>好吧,我比较懒,也懒得去看源码,先找找有没有uniapp或者vue版本的jsencrypt.js吧:</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>【尝试二】</p>
<p>教程地址:<span style="color: rgba(0, 0, 255, 1)">https://www.jianshu.com/p/adc471b4d5d6</span></p>
<p>&nbsp;</p>
<p>这次的jsencrypt.js是github(仓库地址:<span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)">https://github.com/ShuKeHong/uniapp-jsencrypt</span></span>)上的uniapp版本,看着也更靠谱:</p>
<p>照着文中步骤一步步进行了配置:</p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622152415783-1984603048.png"></p>
<p>&nbsp;</p>
<p>然后运行起来看一下:</p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622152502882-259778871.png"></p>
<p>&nbsp;</p>
<p>&nbsp;哎哟,好像对了耶!</p>
<p>&nbsp;</p>
<p>于是我又拿着老弟给我的真实数据,进行测试:</p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622152737049-1551983530.png"></p>
<p>&nbsp;</p>
<p>纳尼!!报错了:<span style="color: rgba(255, 0, 0, 1)"><strong>Message too long for RSA</strong></span></p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622152833553-1600030913.png"></p>
<p>&nbsp;</p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">好家伙,密文直接给我干成false了!</span></strong>看来这个也有问题鸭!</p>
<p>&nbsp;</p>
<p>猜测是加密的字符串太长,导致了异常。但我还是懒,不想去看源码,继续百度!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>【尝试三】</p>
<p>教程地址:<span style="color: rgba(0, 0, 255, 1)">https://www.freesion.com/article/8202630659/</span></p>
<p>&nbsp;</p>
<p>文中提到了encryptlong.js,感觉这个和我的问题正好互补,应该靠谱,试试水吧:</p>
<p>结果遇到了最开始的那种问题:</p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622153415793-1215311494.png"></p>
<p>&nbsp;</p>
<p>呵呵!这个js也不支持vue,难道天要亡我吗???</p>
<p>&nbsp;</p>
<p>不!我命油我不油天!要不……咱们还是看源码吧!</p>
<p>……</p>
<p>……</p>
<p>经过一顿简单操作,终于成功了:</p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622155103861-875764479.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;那么我是如何成功的呢?</p>
<p>①将【尝试三】中(仓库地址:<span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)">https://www.npmjs.com/package/encryptlong</span></span>)源码里的 <strong><span style="color: rgba(0, 0, 255, 1)">encryptLong</span></strong> 方法和 <span style="color: rgba(0, 0, 255, 1)"><strong>decryptLong</strong></span> 方法,</p>
<p>拷贝到【尝试二】中(仓库地址:<span style="color: rgba(0, 0, 255, 1)">https://github.com/ShuKeHong/uniapp-jsencrypt</span>);</p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622155806594-1963280134.png"></p>
<p>②加密时调用encryptLong方法,解密时调用decryptLong方法;</p>
<p><img src="https://img2020.cnblogs.com/blog/983493/202106/983493-20210622155701715-2058168088.png"></p>
<p>&nbsp;</p>
<p>完美,神功大成!</p>
<p>&nbsp;</p>
<p>---------------------------------------------------</p>
<p>然而并没有完美,后来又发现问题了。详情请看第二篇:《uni-app app vue 小程序 RSA 加密/解密 使用 jsencrypt 踩坑(字符乱码问题)(二)》</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>有点饿了,拿碗排队打饭!</p>
<p>&nbsp;</p>
<p>如果对您有帮助,可以的话请帮我点个赞吧,谢谢~</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/wshisboy/p/14905388.html
頁: [1]
查看完整版本: uni-app app vue 小程序 RSA 加密/解密 使用 jsencrypt 踩坑(Message too long for RSA/Cannot read property 'appName')(一)