ajax仅负责传输加密数据,解密由前端响应后处理;需明确加密类型、密钥来源及编码格式,并在success/then中用web crypto等api解密,密钥须安全获取且避免硬编码,可统一封装于响应拦截器。

Ajax 本身不关心数据是否加密,它只负责发送请求和接收原始响应(比如字符串或 ArrayBuffer)。真正处理加密数据的是你接收到响应后的解密逻辑。
确认加密方式和密钥来源
接口返回的“加密数据”通常不是标准格式,必须明确:
- 用的是对称加密(如 AES)还是非对称加密(如 RSA)
- 密钥是固定写死、从登录态中提取,还是由服务端动态下发(比如通过 header 或响应体中的 key 字段)
- 加密结果是 Base64、Hex 还是直接二进制(此时需用 responseType: 'arraybuffer')
在 success 回调或 then 中解密
Ajax 请求拿到响应后,先按约定解析原始数据,再传给解密函数。例如使用 Web Crypto API 解 AES:
Java Linux版下载入口,提供 Oracle JDK 26.0.2 官方 Linux 安装包、Java 环境配置、JDBC 数据库连接和 Java 服务端开发相关信息。
// 假设后端返回 { data: "base64-encoded-ciphertext", iv: "base64-iv" }
fetch('/api/data')
.then(r => r.json())
.then(res => {
const ciphertext = Uint8Array.from(atob(res.data), c => c.charCodeAt(0));
const iv = Uint8Array.from(atob(res.iv), c => c.charCodeAt(0));
return decryptAes(ciphertext, key, iv);
})
.then(plainText => console.log(new TextDecoder().decode(plainText)));
注意跨域与密钥安全
前端解密的前提是能安全拿到密钥:
- 不要把主密钥硬编码在 JS 里,容易被逆向
- 推荐用服务端派发短期有效的会话密钥(比如登录后返回一个临时 aes-key,用 RSA 公钥加密传输)
- 若涉及敏感操作,解密逻辑可放在 Web Worker 或 Service Worker 中减少被调试风险
统一封装解密响应拦截器
用 axios 或自定义 fetch 封装时,可在响应拦截器中集中处理:
axios.interceptors.response.use(
async res => {
if (res.data?.encrypted) {
const plain = await decrypt(res.data.payload, getSessionKey());
return { ...res, data: JSON.parse(plain) };
}
return res;
}
);
这样业务层无需感知加解密,只当普通 JSON 使用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










