客户端请求部分:
<?php
include 'AES.php';
$md5Key = 'ThisIsAMd5Key'; // 对应服务端:$md5key = 'ThisIsAMd5Key';
$aesKey = Crypt_AES::strToHex('1qa2ws4rf3edzxcv'); // 对应服务端:$aesKey = '3171613277733472663365647A786376';
$aesKey = Crypt_AES::hex2bin($aesKey);
$aesIV = Crypt_AES::strToHex('dfg452ws'); // 对应服务端:$aesIV = '6466673435327773';
$aes = new Crypt_AES($aesKey,$aesIV,array('PKCS7'=>true, 'mode'=>'cbc'));
// var_dump($aes);
$data['name'] = 'idoubi';
$data['sex']= 'male';
$data['age'] = 23;
$data['signature'] = '白天我是一个程序员,晚上我就是一个有梦想的演员。';
$content = base64_encode($aes->encrypt(json_encode($data)));
$content = urlencode($content);
$sign = md5($content.$md5Key);
$url = 'http://localhost/aesdemo/api.php';
$params = "version=1.0&sign=$sign&content=$content";
// 请求接口
post($url, $params);
/**
* 接口请求函数
*/
function post($url, $params) {
$curlPost= $params;
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, $url); //提交到指定网页
curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$result = curl_exec($ch);//运行curl
curl_close($ch);
var_dump(json_decode($result, true));
}
接口处理逻辑:
<?php
include 'AES.php';
$data = $_POST; // 接口请求得到的数据
$content = $data['content'];
$sign = $data['sign'];
$aesKey = '3171613277733472663365647A786376';
$aesIV = '6466673435327773';
$md5key = 'ThisIsAMd5Key';
// 校验数据
if(strcasecmp(md5(urlencode($content).$md5key),$sign) == 0) {
// 数据校验成功
$key = Crypt_AES::hex2bin($aesKey);
$aes = new Crypt_AES($key, $aesIV, array('PKCS7'=>true, 'mode'=>'cbc'));
$decrypt = $aes->decrypt(base64_decode($content));
if (!$decrypt) { // 解密失败
echo json_encode('can not decrypt the data');
} else {
echo json_encode($decrypt); // 解密成功
}
} else{
echo json_encode('data is not integrity'); // 数据校验失败
}
上述接口请求过程中定义了三个加解密需要用到的参数:$aesKey、$aesIV、$md5key,在实际应用过程中,只要与客户端用户约定好这三个参数,客户端程序员利用这几个参数对要请求的数据进行加密后再请求接口,服务端程序员在接收到数据后利用同样的加解密参数对数据进行解密,整个api请求过程中的数据就很安全了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。







