什么是RSA加密,详情可以百度。
简单来说 RSA加密算法是一种非对称加密算法。
是一种通过公钥加密,私钥解密的非对称加密方法。
一般公钥对外暴露,私钥私密保存,只有正确的私钥可以解密出正确的内容。
jsencrypt 是一个基于rsa加解密的js库
1.官网下载 jsencrypt.js ,require引入到小程序使用。
使用的版本 /*! JSEncrypt v2.3.1 | https://cdn.jsdelivr.net/npm/jsencrypt@2.3.1/bin/jsencrypt.js */
2.跑起来,看看有哪些错误
看不懂,求助谷歌,原来是 jsencrypt.js
是不兼容小程序的,因为小程序没有 window
对象。
如果需要在小程序中使用需要修改源码,进行适配
在小程序中引入 jsencrypt 需要对源码就行修改适配。因为小程序没有 window
对象。
搜到一篇微信开饭社区文档:https://developers.weixin.qq.com/community/develop/doc/000068b497cfc00619b7bcfdc51004
修改后并没有加密成功,开饭社区还是不怎么靠谱啊
搜到一篇评论挺多人说有用的文章:https://blog.csdn.net/qq_34672907/article/details/89605498
该文章的修改思路是直接替换 window
对象和 navigator
对象。思路有了
照猫画虎,修改,navigator
我做了 ?.
链式调用处理不需要修改,直接添加一个 window
对象
改完 window
,其他遇到报错,也按同样的思路处理适配,代码终于没有明显的输出报错了。
![]](https://img-blog.csdnimg.cn/a057c7c7de924616a365b80a67a747b1.png)
最后正常按照 h5 d 使用方式使用接口。
期间遇到问题,需要一步步调试。
下面讲讲调试的过程。
如果加密的数据没有解密成功,要查看源码的 encrypt
方法是否加密成功,一步步调试。
注意加密如果失败,这里会返回 false
需要打印才能看到
发现加密失败,断点调试找到对应的方法
回溯调用栈找到最开始出现错误的地方
this.n
是 null
这里我不确定为什么是 null
全局搜索一下 this.n
在哪里赋值,
初始化的时候是 this.n
就是 null
,应该是在哪里赋值了
继续回溯错误,发现是 Base64 is not defined
,对源码进行修改,给 Base64
Hex
加上 window
调用
最后加密的内容终于成功了