数据变化过程:
1、原始数据:Array ( [name] => xubin [age] => '17 [sex] => 男 )
2、添加反斜杠:Array ( [name] => xubin [age] => \'17 [sex] => 男 )
3、排序:Array ( [age] => \'17 [name] => xubin [sex] => 男 )
4、拼接成字符串:age\'17Namexubinsex男
5、拼接签名key:age\'17Namexubinsex男123456
6、拼接后台全部转小写:age\'17namexubinsex男123456
7、Md5加密:64b766e4c910abf069e7da768a7876ab
8、转成大写:64B766E4C910ABF069E7DA768A7876AB
<?php
header("Content-Type: text/html; charset=utf-8");
class ClassName
{
private $KEY = '123456';
/**
* ksort — 对数组按照键名排序
* stripslashes — 反引用一个引用字符串
* json_decode — 对 JSON 格式的字符串进行解码
* strtoupper — 将字符串转化为大写
* @param $param
* @param string $signKey
* @return string
*/
function buildSign($param, $signKey = '')
{
$signKey = !empty($signKey) ? $signKey : $this->KEY;
$param = $this->_addslashes($param);
ksort($param);
$str = '';
foreach ($param as $key => $val) {
$a = stripslashes($val);
$var = json_decode($a, true);
if (!is_array($var)) {
$str .= $key . $val;
}
}
$tmpStr = strtoupper(md5(strtolower($str . $signKey)));
return $tmpStr;
}
/**
* 递归调用
* addslashes — 使用反斜线引用字符串
* get_magic_quotes_gpc — 获取当前 magic_quotes_gpc 的配置选项设置
* @param $svar
* @return array|string
*/
function _addslashes(&$svar)
{
if (!get_magic_quotes_gpc()) {
if (is_array($svar)) {
foreach ($svar as $_k => $_v) {
$svar[$_k] = $this->_addslashes($_v);
}
} else {
$svar = addslashes($svar);
}
}
return $svar;
}
}
$arr = [
'Name' => 'xubin',
'age' => "'17",
'sex' => '男'
];
$bui = new ClassName();
$data = $bui->buildSign($arr);
print_r($data);
?>
使用:传输方跟接收方同时使用签名key对数据进行签名对比结果可判定数据是否有篡改情况。