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;
}
相关推荐
Apifox4 分钟前
Apifox 6 月更新|Apifox CLI 全面升级、导入导出优化、OAuth 2.0 支持自动刷新令牌
前端·后端·测试
CodingSpace14 分钟前
TypeScript 装饰器
前端
宸翰17 分钟前
解决 uni-app App 端 vue-i18n 占位符丢失:封装跨端可用的 tf 格式化方法
前端·vue.js·uni-app
systemPro23 分钟前
光储充系统数据流全解析:PV / ESS / GRID 数据怎么流转,线损怎么算
前端
古茗前端团队2 小时前
急招!前端|测试|后端|产品(名额多,速来)
前端·后端·架构
Lsx_3 小时前
不只是 Prompt:用 Superpowers Skill 给 AI 编程装上工程化工作流
前端·ai编程·claude
小碗细面3 小时前
前端 Prompt 工程实战:如何搭建场景化 Prompt 库
前端·ai编程
阿瑞IT3 小时前
2026年 AI Agent 生产化落地全景:四大高频故障根因分析与工程解法
前端
木木剑光3 小时前
我开源了一个 React 组件库,沉淀了多个高频组件和实用 Hooks
前端·javascript·react.js
kyriewen3 小时前
DeepSeek API 高峰时段涨价 2 倍,便宜大碗的时代要结束了?
前端·ai编程·deepseek