讲师中心 微信公众号
AI工具推荐 视频效率加速

JavaScript 怎么对后端返回的加密接口数据进行前端解密

胖明大大_8813

胖明大大_8813

发布时间:2026-09-05 13:07:59

|

887人浏览过

|

来源于php中文网

原创

前端解密后端数据需严格匹配算法、密钥、IV、填充和编码;依赖Web Crypto API或CryptoJS等库,须先确认后端具体方案(如AES-128-CBC)、密钥来源、IV传递方式、base64/hex编码及PKCS#7等填充。

javascript 怎么对后端返回的加密接口数据进行前端解密

前端解密后端返回的加密数据,核心在于前后端使用**完全一致的加密算法、密钥、IV(初始化向量)、填充方式和编码格式**。JavaScript 本身不内置对称/非对称解密能力,需依赖 Web Crypto API(现代浏览器)或成熟第三方库(如 CryptoJS、forge),且必须与后端严格对齐参数。

确认后端使用的具体加密方案

这是最关键的一步。不能凭猜测写解密逻辑。需明确以下信息:

  • 算法类型:AES-128-CBC、AES-256-GCM、RSA-OAEP、SM4-CBC 等(注意国密 SM2/SM4 需额外支持)
  • 密钥来源:是固定密钥?还是通过登录后动态协商(如 RSA 加密传输 AES 密钥)?或是从 localStorage / cookie 读取?
  • IV 或 nonce:是否随数据一起返回(常见于 CBC/GCM 模式)?长度是否正确(如 AES-CBC 要求 16 字节)?
  • 数据编码:后端返回的是 base64?hex?还是直接二进制流(需用 Uint8Array 处理)?
  • 填充方式:PKCS#7?ZeroPadding?GCM 无需填充。

使用 Web Crypto API 解密(推荐,原生安全)

适用于现代浏览器(Chrome 80+、Firefox 69+、Edge 79+)。以 AES-CBC 为例:

假设后端返回 JSON:{"data": "base64密文", "iv": "base64 IV"}

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载

立即学习“Java免费学习笔记(深入)”;

async function decryptAES(dataB64, ivB64, keyStr) {
  // 1. 将 base64 转为 Uint8Array
  const ciphertext = base64ToArrayBuffer(dataB64);
  const iv = base64ToArrayBuffer(ivB64);

  // 2. 导入密钥(注意:keyStr 必须是原始密钥字节,不是字符串直接转!)
  // 若后端用 password派生密钥(如 PBKDF2),此处需先执行 deriveKey
  const key = await crypto.subtle.importKey(
    'raw',
    new TextEncoder().encode(keyStr), // ⚠️仅当 keyStr 是原始密钥字节时才这样用
    { name: 'AES-CBC' },
    false,
    ['decrypt']
  );

  // 3. 执行解密
  const decrypted = await crypto.subtle.decrypt(
    { name: 'AES-CBC', iv },
    key,
    ciphertext
  );

  // 4. 转为字符串(假设 UTF-8)
  return new TextDecoder().decode(decrypted);
}

function base64ToArrayBuffer(base64) {
  const bin = atob(base64);
  const len = bin.length;
  const buf = new ArrayBuffer(len);
  const view = new Uint8Array(buf);
  for (let i = 0; i < len; i++) view[i] = bin.charCodeAt(i);
  return buf;
}

使用 CryptoJS(兼容旧浏览器,但注意安全风险)

若需支持 IE 或老版本浏览器,可用 CryptoJS,但需确保版本与后端一致(如 CryptoJS 3.1.2 对应某些 Java 后端实现):

// 注意:CryptoJS 默认使用 OpenSSL 格式密钥派生(EVP_BytesToKey),若后端未用此方式,必须手动对齐
const CryptoJS = require('crypto-js');

function decryptWithCryptoJS(ciphertextB64, keyStr, ivB64) {
  const ciphertext = CryptoJS.enc.Base64.parse(ciphertextB64);
  const iv = CryptoJS.enc.Base64.parse(ivB64);
  const key = CryptoJS.enc.Utf8.parse(keyStr); // ⚠️仅当 keyStr 是原始 16/24/32 字节密钥时才正确

  const decrypted = CryptoJS.AES.decrypt(
    { ciphertext },
    key,
    {
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7,
      iv
    }
  );

  return decrypted.toString(CryptoJS.enc.Utf8);
}

⚠️警告:CryptoJS 的 parse 行为易出错;密钥长度不符会静默失败;不推荐用于新项目。

处理密钥协商与敏感信息防护

前端永远不该硬编码密钥,也不该从不可信来源加载密钥:

  • 登录成功后,后端可返回一个临时 AES 密钥(用 RSA 公钥加密传输),前端用私钥(或由服务端托管)解出,再解业务数据
  • 更安全的做法是:敏感解密逻辑放在后端,前端只请求“已解密结果”,避免密钥和算法暴露
  • 若必须前端解密,请确保密钥通过 HTTPS 安全传输,且不在 DevTools 控制台、日志或 source map 中泄露

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2323

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6090

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

5446

2024.03.19

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2323

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5023

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6090

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5618

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

803

2024.05.22

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn