AES-GCM 解密失败解决方案

背景

使用uniapp开发微信小程序,因为后端返回参数有加密数据使用的是AES_GCM加密算法,因此使用asmcrypto.js用于解密,微信开发者工具中,代码正常,但是部署上线后出现atobBufferTextDecoderundefind情况

问题代码

  • 小程序中不支持 atob
js 复制代码
// 解码
function base64ToBytes(base64) {
  return Uint8Array.from(atob(base64), c => c.charCodeAt(0));
}
  • 小程序中不支持 TextDecoder
js 复制代码
function decrypt(key, info) {

    // ·········
    // ·········
    // 5. 转 UTF-8 字符串
    const decoder = new TextDecoder("utf-8");
    // ·········
    // ·········
}

处理

  • 小程序中不支持 atob,替换方法
javascript 复制代码
function base64ToBytes(base64) {
  const arrayBuffer = uni.base64ToArrayBuffer(base64);
  return new Uint8Array(arrayBuffer);
}
  • 小程序中不支持 TextDecoder, 替换方法
ini 复制代码
// Uint8Array 转 UTF-8 字符串
function utf8BytesToString(bytes) {
  let str = '';
  let i = 0;
  while (i < bytes.length) {
    const b1 = bytes[i++];
    if (b1 < 0x80) {
      str += String.fromCharCode(b1);
    } else if (b1 < 0xE0) {
      const b2 = bytes[i++];
      str += String.fromCharCode(((b1 & 0x1F) << 6) | (b2 & 0x3F));
    } else if (b1 < 0xF0) {
      const b2 = bytes[i++];
      const b3 = bytes[i++];
      str += String.fromCharCode(
        ((b1 & 0x0F) << 12) |
        ((b2 & 0x3F) << 6) |
        (b3 & 0x3F)
      );
    } else {
      const b2 = bytes[i++];
      const b3 = bytes[i++];
      const b4 = bytes[i++];
      let codepoint =
        ((b1 & 0x07) << 18) |
        ((b2 & 0x3F) << 12) |
        ((b3 & 0x3F) << 6) |
        (b4 & 0x3F);
      codepoint -= 0x10000;
      str += String.fromCharCode(
        0xD800 + (codepoint >> 10),
        0xDC00 + (codepoint & 0x3FF)
      );
    }
  }
  return str;
}
相关推荐
多看书少吃饭15 分钟前
从 ScriptProcessor 到 AudioWorklet:Electron 桌面端录音实践总结
前端·javascript·electron
user714226596457819 分钟前
react中useMemo和useCallback的使用场景
前端
JS_GGbond23 分钟前
前端水印实战:给你的页面穿上“隐形盔甲”
前端
Sthenia27 分钟前
如何用 Chrome DevTools 定位 Long Task:一份从零到实战的排查笔记
前端·性能优化
用户222645989434138 分钟前
CSS单位全解析:从像素到视口的响应式设计
前端
Mapmost39 分钟前
【实景三维】还再为渲染发愁?手把手教你大场景如何实现“精细”与“流畅”平衡!
前端
钱多多81041 分钟前
Vue版本降级操作指南(解决依赖冲突与版本不一致问题)
前端·javascript·vue.js·前端框架
San3044 分钟前
深度解析 React 组件化开发:从 Props 通信到样式管理的进阶指南
前端·javascript·react.js
AAA阿giao44 分钟前
深度解析 React 项目架构:从文件结构到核心 API 的全面拆解
前端·javascript·react.js
LYFlied1 小时前
Vue3虚拟DOM更新机制源码深度解析
前端·算法·面试·vue·源码解读