讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

updream

一键生成高质量推广成片

Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

php返回json数据怎么加密_json数据加密返回方法【指南】

酷辰小哥_6644

酷辰小哥_6644

发布时间:2026-02-19 10:42:02

|

831人浏览过

|

来源于php中文网

原创

PHP返回JSON前通常无需加密,应优先使用HTTPS;仅第三方回调和内部微服务通信等特定场景需加密,且须严格遵循IV随机生成、密钥长度匹配、base64编码等规范。

php返回json数据怎么加密_json数据加密返回方法【指南】

PHP 返回 JSON 前要不要加密?先看场景 大多数情况下,json_encode() 后直接输出的 JSON **不需要、也不该由 PHP 层加密**。浏览器或 App 拿到的是明文,但传输层该走 HTTPS 就走 HTTPS;如果真要防中间人或防调试抓包,靠 PHP 加密 JSON 是伪安全——密钥藏在哪?JS 怎么解?反而暴露逻辑、增加维护成本。

真正需要加密的典型场景只有两个:

  • 第三方系统回调(比如支付通知),要求你用 AES 对响应体加密后再返回
  • 内部微服务间通信,且明确约定使用对称密钥做 payload 加密(非 HTTP Header 或 Token)

用 openssl_encrypt() 加密 JSON 字符串的正确姿势 核心是:先 json_encode(),再加密,最后 base64 编码(因为加密结果含二进制字节,不能直接塞进 HTTP 响应体)。
$data = ['status' => 'success', 'uid' => 123];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
$method = 'AES-256-CBC';
$key = '32-byte-key-must-be-exactly-this-length'; // 必须严格32字节
$ivlen = openssl_cipher_iv_length($method);
$iv = openssl_random_pseudo_bytes($ivlen); // 每次生成新 IV
$encrypted = openssl_encrypt($json, $method, $key, 0, $iv);
$result = [
    'data' => base64_encode($encrypted),
    'iv'   => base64_encode($iv)
];
header('Content-Type: application/json');
echo json_encode($result, JSON_UNESCAPED_UNICODE);

注意点:

  • openssl_encrypt() 的 $options 参数必须为 0(不是 OPENSSL_RAW_DATA),否则和默认行为不一致
  • $key 长度必须匹配算法:AES-256 要 32 字节,AES-128 要 16 字节,用 strlen($key) 校验过再上线
  • $iv 必须随密文一起传出去,且每次请求都该是新的,不能硬编码

常见报错:openssl_encrypt(): Using an empty Initialization Vector 这通常不是 IV 真为空,而是你传了 null 或空字符串给 $iv 参数,而函数没做容错就直接崩了。

排查步骤:

cn-json-diff
cn-json-diff

比较两个 JSON 文件并显示差异。支持嵌套结构、数组及值变更。纯 Python 标准库实现,无需 API 密钥。

下载
  • 检查 $iv 是否真的被赋值,var_dump($iv) 看长度是不是 16(AES-128)或 16(AES-256-CBC 同样要 16 字节 IV)
  • 不要用 md5() 或 sha1() 截取当 IV,它们输出是 hex 字符串,长度翻倍且含非法字符
  • 如果从请求里读 IV,确保它经过 base64_decode() 再传入 openssl_decrypt()

前端解密失败?大概率是 padding 或编码不一致 PHP 默认用 PKCS#7 填充,JS 的 CryptoJS 或 Web Crypto API 默认可能不同。例如:
  • CryptoJS 解密时必须显式指定 { padding: CryptoJS.pad.Pkcs7 }
  • Web Crypto 的 decrypt() 要用 AesCbcParams,且 iv 必须是 Uint8Array,不是 base64 字符串
  • PHP 的 json_encode() 若含中文,默认转成 \uXXXX,而有些 JS 解密后直接拼 JSON 字符串,会导致解析失败;建议加 JSON_UNESCAPED_UNICODE

加密本身不难,难的是两端对齐:IV 生成方式、密钥来源、padding 规则、base64 编码层级、字符集处理。漏掉任何一环,都是“能加密不能解”或者“能解不能 JSON.parse”。

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

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
PixTV
PixTV Hot

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

DeepSeek

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

蛙蛙写作

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

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

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

WorkBuddy

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

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2295

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3782

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1256

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4379

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

569

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

15266

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1785

2023.09.14

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

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

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