1. 云栖社区>
  2. PHP教程>
  3. 正文

php Rc4对接java过程中遇见的坑

作者:用户 来源:互联网 时间:2017-11-30 16:14:00

javaphpRC4对接过程遇见

php Rc4对接java过程中遇见的坑 - 摘要: 本文讲的是php Rc4对接java过程中遇见的坑, 方法一:(传输十六进制) 直接将返回的二进制数据,转换成十六进制,然后发送给java 实例: $post=array('app_key'=>'ce387668d26157','code'=>'a0b92382'); $key=

方法一:(传输十六进制)

直接将返回的二进制数据,转换成十六进制,然后发送给java

实例:

$post=array('app_key'=>'ce387668d26157','code'=>'a0b92382');

$key='123456';

$data=_rc4($key,json_encode($post));

$data=bin2hex($data);/*二进制转换为十六进制*/

echo$data;/*传送给java*/

function _rc4($pwd, $data){    $key[] = "";    $box[] = "";    $pwd_length = strlen($pwd);    $data_length = strlen($data);    for ($i = 0; $i < 256; $i++) {        $key[$i] = ord($pwd[$i % $pwd_length]);        $box[$i] = $i;    }
for ($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $key[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; }
$cipher = ''; for ($a = $j = $i = 0; $i < $data_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256;
$tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp;
$k = $box[(($box[$a] + $box[$j]) % 256)]; $cipher .= chr(ord($data[$i]) ^ $k); } return $cipher;}
方法二、(传输二进制)

1、汉字在php中换算成字节后跟java对不上的,按照规律在Rc4方法中加入了这么一行代码

$byte = (ord($data[$i]) >= 128)?(ord($data[$i]) - 256):ord($data[$i]);
2、对内容进行编码,可使用的编码方式 unicode 、urlencode...等

3、写流的时候 使用UTF-8编码 (实现不了可以使用utf8_encode,当然接收的时候就也需要加上utf8_decode)

实例:这里使用的是unicode

$post = array ('app_key'=>'ce387668d26157', 'code' => 'a0b92382');$key = '123456';$json =json_encode($post,JSON_UNESCAPED_UNICODE);$data = enRc4($key,unicode_encode($json));echo utf8_encode($data);/*传送给java*/

function enRc4($key,$data){    $vactor[]='';    $tempK[]='';    $k_len = strlen($key);    $data_len = strlen($data);    for ($i = 0; $i < 256; $i++) {        $tempK[$i] = ord($key[$i % $k_len]);        $vactor[$i] = $i;    }    for($j=$i=0;$i<256;$i++){        $j = ($j+$vactor[$i]+$tempK[$i])%256;        $temp = $vactor[$i];        $vactor[$i] =$vactor[$j];        $vactor[$j] = $temp;    }    $cipher = '';    for ($i = $j = $x = 0; $x < $data_len; $x++) {        $i = ($i + 1) % 256;        $j = ($j + $vactor[$i]) % 256;        $tmp = $vactor[$i];        $vactor[$i] = $vactor[$j];        $vactor[$j] = $tmp;        $k = $vactor[($vactor[$i] + ($vactor[$j]%256)) % 256];        $byte = (ord($data[$x]) >= 128)?(ord($data[$x]) - 256):ord($data[$x]);        $cipher .= chr($byte ^ $k);    }    return $cipher;}//将内容进行UNICODE编码,编码后的内容格式:/u56fe/u7247 (原始:图片)function unicode_encode($name){    $name = iconv('UTF-8', 'UCS-2', $name);    $len  = strlen($name);    $str  = '';    for ($i = 0; $i < $len - 1; $i = $i + 2){        $c  = $name[$i];        $c2 = $name[$i + 1];        if (ord($c) > 0){   //两个字节的文字            $str .= '/u'.base_convert(ord($c), 10, 16).str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);                   } else {            $str .= '/u'.str_pad(base_convert(ord($c2), 10, 16), 4, 0, STR_PAD_LEFT);                  }    }    return $str;}


以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java , php , RC4 , 对接 , 过程 遇见 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备