php玩转json数据加密解密,搞定就这么简单!

2025-07-23 5:25:46 秘籍 思思

哈喽各位码农老铁们,今天咱们来聊聊一个玄乎但又不得不懂的技术点——json数据加密解密,用PHP来操作!别急着翻白眼,听我说完,这事儿其实没那么高深,甚至有种“我也行”的赶脚。

好了,我们先来个科普:json,全称JavaScript Object Notation,是程序员界的“万能数据包”。它轻巧、易懂,简直就是接口数据传输的扛把子。只是,有时候你不想让别人随便看到你传的那些数据,直接明文json就像在大街上叫卖你的隐私。所以呢,给json“套个保险锁”——加密,解密,才是王道。

【干货时间!】

用PHP做json加密解密,一般来说我们有以下几个步骤:

1. json_encode——先把数组或者对象转成json字符串;

2. 加密处理——用php各种加密手段对json字符串进行处理;

3. 传输或存储——加密后的数据搞定,再传出去,或者存在数据库里;

4. 解密处理——收到数据再用对应密钥和算法解密;

5. json_decode——解密后的字符串再转回php数组或对象。

简单两句PHP代码能让你感觉这事儿很顺滑,比如:

$data = ['name' => '老王', 'age' => 30];

$json = json_encode($data);

到这里json字符串就整好了,接下来才是“魔法”部分。

### 常见加密方式有哪些呢?

PHP中,最常用的加密手段有这几招:

  • openssl:强力的对称加密和非对称加密,支持AES、RSA,安全感满满;
  • mcrypt:老牌加密扩展,但php7+就不推荐用咯;
  • hash_hmac结合base64编码:简单轻便,适合验签;
  • 自定义异或运算:虽说看着像黑科技,但遇到稍微懂点的人,一下就破了的“快乐土法加密”;
  • Libsodium:PHP7.2+自带的现代加密库,可以秒掉你对安全性的担忧。

举个用openssl_encrypt加密json字符串的例子:

$key = '1234567890123456'; // 16位密钥

$iv = openssl_random_pseudo_bytes(16); // 初始化向量

$data = ['name' => '老王', 'age' => 30];

$json = json_encode($data);

$encrypted = openssl_encrypt($json, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);

$payload = base64_encode($iv . $encrypted);

echo $payload;

这里先生成了16字节的“初始化向量”(IV),紧接着把json做了aes-128-cbc模式的加密,再把iv和密文拼一起base64编码,传出去,安心到飞起。

解析回来时,代码也挺清晰:

$payload = base64_decode($payload);

$iv = substr($payload, 0, 16);

$encrypted = substr($payload, 16);

$decrypted = openssl_decrypt($encrypted, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);

$data = json_decode($decrypted, true);

简单明了,解开“保险锁”,json数据重现江湖!

不过,万事万物都有坑,具体操作的时候你得小心几点:

  • 密钥不要硬编码!别傻傻把钥匙放代码里,放配置文件或者环境变量里靠谱;
  • 初始化向量不能重用!没iv你的aes就变成电锯了;
  • base64编码别忘了!二进制数据直接混入传输可不太友好;
  • 解密失败别慌,处理异常时放个try-catch,别把你的用户吓哭。

说个“脑洞”小tip:有些伙伴不想用openssl,也可能受限于环境,那来个自制“异或”加密怎么样?比如:

function xorEncrypt($data, $key) {

$out = '';

for ($i = 0; $i < strlen($data); $i++) {

$out .= $data[$i] ^ $key[$i % strlen($key)];

}

return base64_encode($out);

}

function xorDecrypt($data, $key) {

$data = base64_decode($data);

$out = '';

for ($i = 0; $i < strlen($data); $i++) {

$out .= $data[$i] ^ $key[$i % strlen($key)];

}

return $out;

}

$json = json_encode(['name' => '小红', 'score' => 99]);

$key = '秘密钥匙';

$encrypted = xorEncrypt($json, $key);

$decrypted = xorDecrypt($encrypted, $key);

var_dump(json_decode($decrypted, true));

默默告诉你,这活儿虽然不能让黑客哭晕在厕所,但对于新手来说,够玩一阵子了。

至于平时如果想轻松加密解密与json相关的操作,网上各种开源包也很多,比如用composer装点加密组件,省得你天天敲那堆代码。技术宅的福利你懂的~

对了,插广告时间到,给你们推荐个神奇宝盒——玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink,没准还能边玩边赚,绝对嗨翻天!

最后,亲们,想加密json数据,php玩起来就是这么灵活。不管是openssl加密看起来高大上,还是自制异或简直玩泥巴,关键是你心态稳,代码稳,数据稳。好了,讲到这,脑子过载不?等你反应过来,密码学也不是啥不可逾越的高山嘛!