PHP生成sign验证接收的数据是否合法
下面的加密是使用的MD5的,也可以根据自己的需求随便更换加密方式做sign验签。
废话不多说,直接上代码:
<?php
//签名的密钥,可以换成自己的
$signKey = 'Dcr163!#!!.cn!!$$%&&xi.+';
if( isset($_POST['type']) ) {
//这里获取数据
$sendData = $_POST;
//未传sign提示报错
if( !isset($sendData['sign']) ) exit('sign不能为空!');
//保存传过来的sign参数
$sendSign = $sendData['sign'];
//删除sign在传递中的数据,方便在下面的生成签名使用
unset($sendData['sign']);
//数据排序
ksort($sendData);
//生成签名,把传递的数据生成 a=1&c=2sss&=bb=jj 格式,加签名的密钥 用md5加密
$sign = md5(http_build_query($sendData).$signKey);
//默认提示信息
$strMsg = '数据验证成功!';
// 用新生成的 sign和传递过来的sign对比,如果一样就代表验证成功,否则就验证失败。或许是接受的数据和发送的的数据不一致,被篡改了;或许是双方加密的密钥不一致。
if( $sign !== $sendSign ) $strMsg = 'sign验证失败!';
exit('<br/>'.$strMsg.'<a href="?"> 返回 </a>');
}
///下面是模拟请求的数据
$time = time();
$data = array(
'type' => 'create',
'name'=>'小红',
'age' => 16,
'weigth' => 100,
'height' => 160,
'sex' => '女',
'remark' => '备注信息',
'time' => $time
);
//排序
ksort($data);
// 变成字符串 a=1&c=2sss&=bb=jj
$req = http_build_query($data);
//生成sign
$sendSign = md5($req.$signKey);
//下面是模拟发送请求的HTML页面
$html = '<input type="hidden" name="sign" value="'.$sendSign.'"> ';
foreach ($data as $k=>$v) {
$html .= '<p><input type="text" name="'.$k.'" value="'.$v.'" readonly/></p>';
}
echo <<<HTML
<form action="?" method="post">
$html
<input type="submit" value="提交">
</form>
HTML;Dcr163的博客
http://dcr163.cn/251.html(转载时请注明本文出处及文章链接)