当前位置: 首页 > 知识库问答 >
问题:

javascript - jsencrypts.js在微信小程序iOS下rsa解密慢的问题?

张通
2024-07-03

uniapp,vue3,vite框架

jsencrypts.js在微信小程序iOS下rsa解密,URLEncoder转码慢的问题.

加密内容是长内容,里面有中文字符,符号等,防止前端乱码,后端先转encodeurl编码,然后用再将内容rsa加密输出给前端.(rsa公 私钥用的512)

后端代码:

public static String encrypt(String content, String publicKey) {
    try {

        RSA rsa = new RSA(null, publicKey);

        content=URLEncoder.encode(content,"UTF-8");

        System.out.println("-------------------------------"+content);

        String ss = rsa.encryptBase64(content, KeyType.PublicKey);

        return ss;

    } catch (Exception e) {

        log.error("公钥加密异常 msg:{}",e.getMessage());

    }

    return null;
 

前端用jsencrypts.js解密,由于长内容,用的decryptLong方法,64字符分段解密, var MAX_DECRYPT_BLOCK = 64

前端再用decodeURIComponent转回中文字符,

分段解密时decryptLong会在方法里面去调decrypt方法,decrypt返回时间较慢。求问如何优化解码时间太长的问题

但是ios小程序解得很慢,约延迟8s+,定位下来,(h5,小程序安卓机速度都正常)

求问如何优化解码时间太长的问题

已尝试方法:换wxmp-rsa 解密,也是一样的效果,现如何解决ios解码慢的问题?

export function decrypt (s) {
// Return the decrypted string.
 try {

  var ret = "";

  var i;

  var k = 0; // b64 state, 0-3

  var slop = 0;

  for (i = 0; i < s.length; ++i) {

      if (s.charAt(i) == b64pad) {

          break;

      }

      var v = b64map.indexOf(s.charAt(i));

      if (v < 0) {

          continue;

      }

      if (k == 0) {

          ret += int2char(v >> 2);

          slop = v & 3;

          k = 1;

      }

      else if (k == 1) {

          ret += int2char((slop << 2) | (v >> 4));

          slop = v & 0xf;

          k = 2;

      }

      else if (k == 2) {

          ret += int2char(slop);

          ret += int2char(v >> 2);

          slop = v & 3;

          k = 3;

      }

      else {

          ret += int2char((slop << 2) | (v >> 4));

          ret += int2char(v & 0xf);

          k = 0;

      }

  }

  if (k == 1) {

      ret += int2char(slop << 2);

  }

  return this.getKey().decrypt(ret);
          }
      catch (ex) {

  return false;

  }

};

:换wxmp-rsa 解密,也是一样的效果,现如何解决ios解码慢的问题?希望大佬解答ios解密慢的问题

共有2个答案

蒋嘉实
2024-07-03

在worker里使用wasm可解
https://developers.weixin.qq.com/miniprogram/dev/framework/pe...
https://developers.weixin.qq.com/miniprogram/dev/api/worker/w...

张唯
2024-07-03

对于iOS上RSA解密速度慢的问题,可能有多个原因。由于您已经尝试了更换解密库但效果相同,我们可以从以下几个方面来探讨可能的解决方案:

  1. 硬件性能:iOS设备之间的硬件性能可能存在差异,尤其是旧款设备。解密操作通常是计算密集型的,因此可能会受到设备性能的限制。
  2. JavaScript引擎:微信小程序在iOS上使用的是WKWebView或WKSafariViewController,它们使用的JavaScript引擎可能与Android上的不同,这可能导致性能差异。
  3. 代码优化:虽然您已经使用了分段解密,但还可以检查decryptLongdecrypt方法的实现,看是否有可以优化的地方。
  4. RSA密钥长度:您提到使用的是512位的RSA密钥。虽然这比常见的1024位或2048位短,但在某些情况下,较短的密钥长度可能会导致更复杂的计算。考虑是否可以在保证安全性的前提下增加密钥长度。
  5. 减少加密数据量:如果可能的话,减少需要加密和解密的数据量。例如,只加密关键信息,而不是整个数据块。
  6. 使用原生模块:微信小程序支持使用原生模块来执行某些操作。您可以考虑编写一个原生模块来执行RSA解密操作,这可能会比JavaScript实现更快。
  7. 使用更快的算法:考虑使用更快的加密算法或库。但是,请注意,这可能会影响到安全性,因此需要谨慎权衡。
  8. 分析性能瓶颈:使用性能分析工具(如Chrome DevTools的Performance Tab)来分析解密操作中的性能瓶颈。这可以帮助您确定是哪个部分导致了延迟。
  9. 异步处理:如果解密操作不是立即需要的,可以考虑将其放在后台异步执行,以减少对用户界面的影响。
  10. 更新和修复:确保您使用的jsencrypts.js库或wxmp-rsa库是最新版本,并查看是否有任何已知的性能问题或修复。

针对您的情况,我建议您首先尝试减少加密数据量(如果可能)。然后,您可以考虑使用原生模块来执行解密操作。最后,如果问题仍然存在,您可以考虑使用性能分析工具来深入分析性能瓶颈,并据此进行优化。

 类似资料:
  • 我们有h5版的页面,为了快速实现小程序,我们用小程序的webview嵌套了h5,但是有些功能需要借助小程序的能力,文档上写的可以wx.miniProgram.postMessage. 但是需要引入微信的jssdk,还要有下面的配置 我们只是一个通用的h5页面,并没有公众号,没有appid这些东西,请问这种情况可以用jssdk吗?

  • 本文向大家介绍微信小程序开发之IOS和Android兼容的问题,包括了微信小程序开发之IOS和Android兼容的问题的使用技巧和注意事项,需要的朋友参考一下 微信小程序开发之IOS和Android兼容的问题 一、时间转换问题: 这不只是小程序上面的问题是ios系统 都有这个问题 就是new  Date("2017-06-16") 在IOS会出现NAN的情况所以对于时间转换需要另行封装,解决方案如

  • 本文向大家介绍微信小程序 devtool隐藏的秘密,包括了微信小程序 devtool隐藏的秘密的使用技巧和注意事项,需要的朋友参考一下 微信小程序 devtool 笔者参与的小程序项目开发也进入尾声了,坑也踩得七七八八,对于哪些没有涵盖和深入使用的功能笔者就不班门弄斧了。 前几篇文章讲了那么多细节也好,策略也好,都是应用层面的东西。自微信小程序公布以来就有先行者不断的探索小程序背后的运行机制。小程

  • @megalo/target 的 platform 设置成 wechat,mini-css-extract-plugin 提取文件后缀改成微信小程序的 wxss。 const createMegaloTarget = require( '@megalo/target' ) const compiler = require( '@megalo/template-compiler' ) const M

  • 1、第三方应用授权对接 ​ 之前对接小程序只提供了开发者授权的方式,这种方式的弊端是,如果客户同时对接了其他的系统,会产生access token冲突,导致消息发不过来。因此新增第三方平台授权的方式,客户可以在智齿后台直接扫二维码授权对接。流程如下: 1.1、选择授权方式,进入配置页 点击绑定小程序时选择授权方式,默认推荐第三方平台授权: 点击确定进入配置页: 1.2、扫描授权二维码 点击“微信公

  • 微信小程序配置 1.微信小程序使用流程 具体配置参考相关教程 uni-app编译版参考教程 uni-app编译版 uni-app开源版参考教程 uni-app开源版 2.微信小程序下载 打开后台-小程序-微信小程序-小程序源码下载,注:针对已购买小程序的客户,可选"编译版""开源版""更新包" 3.微信小程序装修 1.首页导航: (导航能够有效帮助粉丝跳转到各个关键页面,是整个店铺的“指南针”。)

  • 微信小程序 微信小程序扫码授权以后,用户在小程序点击客服按钮发送的消息会转发给机器人,机器人会自动回复消息给小程序用户,同一个微信小程序同时只能绑定一个机器人,如果绑定了新的机器人,之前绑定的机器人会解除绑定。 注:微信小程序渠道接入后,用户仅可以发送文字进行问答。 只需三步接入微信小程序,自动回答小程序上的用户问题: 1. 创建机器人 注册登录https://bot.4paradigm.com后

  • 本文向大家介绍微信小程序 获取手机号 JavaScript解密示例代码详解,包括了微信小程序 获取手机号 JavaScript解密示例代码详解的使用技巧和注意事项,需要的朋友参考一下 当我们在开发微信小程序中,有一个常用的功能,就是获取用户的手机号,然后一键登入小程序,那么手机号如何获取呢?请认真看完本文,保证可以获取到用户的手机号。 刚开始开发微信小程序的时候,想着实现手机验证码登入,后来查阅资