美文网首页
微信小程序中使用RSA算法生成秘钥对

微信小程序中使用RSA算法生成秘钥对

作者: codeCoder | 来源:发表于2018-08-10 13:20 被阅读812次

    GitHub 上使用 JavaScript 来生成公钥私钥对的库:https://github.com/travist/jsencrypt/

    修改库

    但是在微信小程序中,引入这个库会报这样的错误 error.png

    原因是这个第三方库使用了 window 对象,而微信小程序的页面的脚本逻辑是在 JsCore 中运行,JsCore 是一个没有窗口对象的环境,所以不能在脚本中使用 window,也无法在脚本中操作组件。

    经过了一段时间的挣扎,终于找到了解决方法:

    1. 给第三方库添加 window2 和 navigator2 变量
    2. 将程序中用到 window 和 navigator 的地方进行全局替换 为window2 和 navigator2。
    (function (global, factory) {
        typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
        typeof define === 'function' && define.amd ? define(['exports'], factory) :
        (factory((global.JSEncrypt = {})));
    }(this, (function (exports) { 'use strict';
    //--------------------- 这里开始添加---------------------
      // 用来替换 navigator
      var navigator2 = {
        appName: 'Netscape',
        userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
      };
      //  用来替换window
      var window2 = {
        ASN1: null,
        Base64: null,
        Hex: null,
        crypto: null,
        href: null
      };
    //--------------------- 这里结束添加---------------------
    var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
    function int2char(n) {
        return BI_RM.charAt(n);
    }
    

    生成公钥私钥

    // 引入文件
    var Encrypt = require('jsencrypt.js')
    
    // 生成秘钥对
    // 返回数组 array[0]公钥  array[1]私钥
    function generateKeys(){
      var crypt = new Encrypt.JSEncrypt({ default_key_size: 1024 });
      crypt.getKey();
      var publicKey = crypt.getPublicKey();
      var privateKey = crypt.getPrivateKey();
    
      // 去除-----*** RSA **** KEY----- 和空格换行
      publicKey = (publicKey.split('-----'))[2];
      publicKey = publicKey.replace(/\n/g, "").replace(/\r/g, "").replace(/\t/g, "").replace(/\s*/g, "");
      privateKey = (privateKey.split('-----'))[2];
      privateKey = privateKey.replace(/\n/g, "").replace(/\r/g, "").replace(/\t/g, "").replace(/\s*/g, "");
    
      // 返回生成的秘钥对
      return [publicKey, privateKey];
    }
    
    

    相关文章

      网友评论

          本文标题:微信小程序中使用RSA算法生成秘钥对

          本文链接:https://www.haomeiwen.com/subject/zxxcbftx.html