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(转载时请注明本文出处及文章链接)