自定义加密数据接口__myEncrypt

录入时间:2017/2/12 23:48:50      最后更新:2017/2/23 17:24:28

先看例子
function __myEncrypt($data){ if(isset($_GET['r'])){ //为不支持RSA的客户端语言写的例子 set命令有设置rsa单元的话就会有$_GET['r']变量 $rc4密钥2 = _rs(2); $rc4密钥3 = _rs(3); $rc4加密 = rc4byte($rc4密钥2,$data); $rc4加密 = rc4byte($rc4密钥3,$rc4加密); $base64编码数据 = base64_encode($rc4加密); //必须base64_encode return $base64编码数据; }else{ $rc4密钥 = _rs(2); //make_key(); //生成随机字符串 $rsa加密的rc4密钥 = encode_rsa2(_rs(1),$rc4密钥); $加密后的数据 = base64_encode(rc4byte($rc4密钥,$data)); //加密后最好base64_encode一下 $返回数据 = $rsa加密的rc4密钥 . ',' . $加密后的数据; return $返回数据; } }
实际上,这个判断可以不用要的,这样写是为了兼容demo
if(isset($_GET['r'])){ }else{ }
如果你的客户端编程语言能够实现RSA算法,直接像下边这样写,当然你也可以自行修改了
function __myEncrypt($data){ $rc4密钥 = _rs(2); //make_key(); //生成随机字符串 $rsa加密的rc4密钥 = encode_rsa2(_rs(1),$rc4密钥); $加密后的数据 = base64_encode(rc4byte($rc4密钥,$data)); //加密后最好base64_encode一下 $返回数据 = $rsa加密的rc4密钥 . ',' . $加密后的数据; return $返回数据; }
如果你的客户端编程语言不能实现RSA算法,直接像下边这样写,当然你也可以自行修改了
function __myEncrypt($data){ $rc4密钥2 = _rs(2); $rc4密钥3 = _rs(3); $rc4加密 = rc4byte($rc4密钥2,$data); //用密钥2加密一次 $rc4加密 = rc4byte($rc4密钥3,$rc4加密); //再用密钥3加密一次,不能用同一个密钥多次加密 $base64编码数据 = base64_encode($rc4加密); //必须base64_encode return $base64编码数据; }
重点说明: 1、__myEncrypt只加密 ks_cmd("check","****") 或 ipc_cmd("ipc_check","****") 指令所需的返回数据 2、该函数对参数$data按你自己的算法进行加密,将加密后的数据返回 客户端对应的解密实现请参见:自定义解密数据接口是__myDecrypt 如果你不想花费精力去改加解算法的话,那么密钥是一定要改的,由其是 encode_rsa2调用的第1个参数_rs(1),也就是第1个资源字符串,它是RSA私钥PEM内容 RSA私钥PEM内容可从RSA密钥对文件中获取 RSA密钥对文件的生成方式请参见encode_rsa2函数 3、关于参数$data的值 $data实际上是base64编码后的一个单元集 "<xml><state>***</state><message>***</message>.....</xml>" 你可以base64解码,就得到原始的单元集,可对添加新的自定义单元到单元集里 方法如下 function __myEncrypt($data){ $GBK_Data=base64_decode($data); //base64解码后 文本是GBK编码的 单元集 <xml><state>***</state><message>***</message>.....</xml> $UTF8_Data=iconv('GB2312', 'UTF-8', $GBK_Data); //为防意外出现,转成utf-8,再对数据进行操作 //添加一个自定义单元,字符串操作 $UTF8_Data=substr($UTF8_Data,5) //去掉头部的5个字符<xml> $UTF8_Data='<xml><mydata1>我自定义的数据单元<mydata1>'.$UTF8_Data //下边红色的为修改randomstr单元的值 //正则后 $ms[1] 就是客户端发送过来的randomstr单元的值 preg_match('/<randomstr>(.*)<\/randomstr>/', $UTF8_Data, $ms); //对 randomstr进行适当的加密运算,我下边直接md5后取前16位 $newrandomstr=substr(md5($ms[1]),0,16); //替换randomstr的值为加密后的值 $UTF8_Data=preg_replace('/<randomstr>.*<\/randomstr>/i', '<randomstr>'.$newrandomstr.'</randomstr>', $UTF8_Data); //再转成GBK,并base64编码 $GBK_Data=iconv('UTF-8', 'GB2312', $UTF8_Data); $data=base64_encode($GBK_Data); //然后对数据进行加密 $rc4密钥 = make_key(); //生成随机字符串做为rc4的密钥 $rsa加密的rc4密钥 = encode_rsa2(_rs(1),$rc4密钥); //用RSA加密rc4密钥 $加密后的数据 = base64_encode(rc4byte($rc4密钥,$data)); //用rc4算法加密$data $返回数据 = $rsa加密的rc4密钥 . ',' . $加密后的数据; //将RSA加密的rc4密钥 和 rc4加密的$data 一起传回给客户端 return $返回数据; }

 Copyright 2008-2017 武汉市洪山区火云网络工作室 可可网络验证系统
 联系电话:027-88778177    鄂ICP备12009746号