我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

苏南大叔要做的智能小程序里面,有个手机号码提交的功能需求。传统网页处理这块的数据提交的时候,有个RSA加密的功能。所以,移植这个功能到智能小程序的时候,就又遇到了这个RSA加密的问题,这貌似是有些棘手的问题。

苏南大叔:百度智能小程序,如何使用jsencrypt.js进行RSA加密? - smartapp-jsencrypt
百度智能小程序,如何使用jsencrypt.js进行RSA加密?(图7-1)

本文测试环境:mac百度开发者工具@2.4.3jsencrypt@3.0.0-rc.1

下载修改jsencrypt

下面的链接中,可以下载到最新版本的jsencrypt。截至到发稿,这个最新版的jsencrypt的版本号是:3.0.0-rc.1

这个类库,是针对拥有window这种传统网页而定制的。所以,我们需要对里面的代码,进行一些修改。当然,这里面的修改思路,来自于网络。苏南大叔略有修改补齐。

主要的修改思路就是:

  • navigator.appName
  • window.

修改点主要有以下五个代码点:

// if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
//     BigInteger.prototype.am = am2;
//     dbits = 30;
// }
// else if (j_lm && (navigator.appName != "Netscape")) {
//     BigInteger.prototype.am = am1;
//     dbits = 26;
// }
// else { // Mozilla/Netscape seems to prefer am3
//     BigInteger.prototype.am = am3;
//     dbits = 28;
// }
BigInteger.prototype.am = am3;
dbits = 28;

苏南大叔:百度智能小程序,如何使用jsencrypt.js进行RSA加密? - jsencrypt-modify-01
百度智能小程序,如何使用jsencrypt.js进行RSA加密?(图7-2)

// if (window.crypto && window.crypto.getRandomValues) {
//     // Extract entropy (2048 bits) from RNG if available
//     var z = new Uint32Array(256);
//     window.crypto.getRandomValues(z);
//     for (t = 0; t < z.length; ++t) {
//         rng_pool[rng_pptr++] = z[t] & 255;
//     }
// }
// sunan modify
var getRandomValues = function (array) {
  for (var i = 0, l = array.length; i < l; i++) {
    array[i] = Math.floor(Math.random() * 256);
  }
  return array;
}
var z = new Uint32Array(256);
getRandomValues(z);

苏南大叔:百度智能小程序,如何使用jsencrypt.js进行RSA加密? - jsencrypt-modify-02
百度智能小程序,如何使用jsencrypt.js进行RSA加密?(图7-3)

//sunan modify
// if (window.removeEventListener) {
//     window.removeEventListener("mousemove", onMouseMoveListener_1, false);
// }
// else if (window.detachEvent) {
//     window.detachEvent("onmousemove", onMouseMoveListener_1);
// }
// return;

苏南大叔:百度智能小程序,如何使用jsencrypt.js进行RSA加密? - jsencrypt-modify-03
百度智能小程序,如何使用jsencrypt.js进行RSA加密?(图7-4)

//sunan modify
// if (window.addEventListener) {
//     window.addEventListener("mousemove", onMouseMoveListener_1, false);
// }
// else if (window.attachEvent) {
//     window.attachEvent("onmousemove", onMouseMoveListener_1);
// }

苏南大叔:百度智能小程序,如何使用jsencrypt.js进行RSA加密? - jsencrypt-modify-04
百度智能小程序,如何使用jsencrypt.js进行RSA加密?(图7-5)

//sunan modify
//window.JSEncrypt = JSEncrypt;

苏南大叔:百度智能小程序,如何使用jsencrypt.js进行RSA加密? - jsencrypt-modify-05
百度智能小程序,如何使用jsencrypt.js进行RSA加密?(图7-6)

引入jsencrypt

在修改后的jsencrypt.js的文件最后,可以看到如下语句:

exports.JSEncrypt = JSEncrypt;
exports.default = JSEncrypt;

所以,引入JSEncrypt的方式(注意修正jsencrypt的路径),代码如下:

const {JSEncrypt} = require('../../libs/jsencrypt');

苏南大叔:百度智能小程序,如何使用jsencrypt.js进行RSA加密? - jsencrypt-import
百度智能小程序,如何使用jsencrypt.js进行RSA加密?(图7-7)

使用方式

剩下的使用方式,就非常简单了。和以前传统网页没有太多区别了。可以参见下面的这篇文字:

简单的描述上来说,基本使用方法是:

newsn.net:这里是【评论】可见内容

注意事项:

  • 注意替换上述代码里面的<public_key>字样。
  • 上述代码中的JSEncrypt类名,来自于最开始的import

总结

在百度智能小程序里面,使用jsencrypt是个技术活儿。更多百度智能小程序相关经验文字,请点击苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   百度    smartapp