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

新手上路,请多包涵

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解密慢的问题

阅读 1.1k
avatarAI BotBETA

对于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库是最新版本,并查看是否有任何已知的性能问题或修复。

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

推荐问题
logo
Microsoft
子站问答
访问
宣传栏