微信小程序中使用RSA算法生成秘鑰對

GitHub 上使用 JavaScript 來生成公鑰私鑰對的庫:https://github.com/travist/jsencrypt/

修改庫

但是在微信小程序中,引入這個庫會報這樣的錯誤
error.png

原因是這個第三方庫使用了 window 對象,而微信小程序的頁面的腳本邏輯是在 JsCore 中運行,JsCore 是一個沒有窗口對象的環(huán)境,所以不能在腳本中使用 window,也無法在腳本中操作組件。

經(jīng)過了一段時間的掙扎,終于找到了解決方法:

  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
  };
//--------------------- 這里結(jié)束添加---------------------
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
function int2char(n) {
    return BI_RM.charAt(n);
}

生成公鑰私鑰

// 引入文件
var Encrypt = require('jsencrypt.js')

// 生成秘鑰對
// 返回數(shù)組 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];
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文地址 https://mbinary.coding.me/introduction-to-bitcoin.ht...
    mbinary閱讀 5,716評論 0 4
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,204評論 3 119
  • 一、快速術(shù)語檢索 比特幣地址:(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串...
    不如假如閱讀 16,576評論 4 87
  • 曾有人跟我說:不要一個人在餐廳吃飯,不要一個人去電影院,那樣會顯得很“悲慘”。我暗自一驚,想象著經(jīng)常獨自一人吃飯、...
    筆尖憶暖閱讀 515評論 6 3
  • 在不知不覺中.暮然回首.獨自一個人.安然的走過了七年. 一直以為.再也不會遇到.怦然心動的感覺了.和他相識于那個夏...
    小葉鳥閱讀 231評論 2 2

友情鏈接更多精彩內(nèi)容