Last updated on 2019年3月8日
- 1.Java中的byte类型,相当于PHP中由 -128到255 之间的值。
- 2.字节数组自然就是这些数字组成的数组(PHP字符串本身也是数组)。
- 3.byte 类型顾名思义是8个bit位组成,字符串由0-255表示,数字由 -128到127表示。
- Java中有很多加密算法,都是接受byte类型参数进行加密。同样在使用PHP与Java对接过程中需要实现相似的步骤,来完成字符串、数字的byte类型转换。
一、字符串转字节数组byte[]
/**
* 实现由字符串转为byte[]字节数组
* @param $string
* @return array
*/
function getStringBytes($string)
{
$bytes = [];
//遍历每一个字符 用ord函数把它们拼接成一个php数组
$stringLen = strlen($string);
for ($i = 0; $i < $stringLen; $i++) {
$bytes[] = ord($string[$i]);
}
return $bytes;
}
二、数字转byte类型
/**
* 实现由数字转为byte字节类型
* @param $int
* @return int
*/
function getIntByte($int)
{
$n = $int & 0x000000FF;
if (128 == ($n & 128)) {
return $n - 256;
} else {
return $n;
}
}
三、字节数组byte[]转为字符串
/**
* 字节数组转为字符串
* @param array $bytes
* @return string
*/
function bytesToSting(array $bytes){
$string = '';
foreach($bytes as $ch) {
$string .= chr($ch);
}
return $string;
}
四、实战
Java要求将加密秘钥(十六进制字符串),每两位长度转为10进制,然后再转为字节数组,整个数组做为新的加密密钥。下面使用PHP实现:
// 加密秘钥
$appKey = 'a1a83942e00c438fcc69523e198a5d47';
$byteArr = [];
foreach(str_split($appKey,2) as $chunk){
$num = hexdec($chunk);
$byteArr[] = getIntByte($num);
}
echo '字节数组:';
print_r($byteArr);
$appKey = bytesToSting($byteArr);
echo '<hr>最终加密秘钥:';
print_r($appKey);
参考链接:
http://www.hishenyi.com/archives/178
http://php.net/manual/zh/function.ord.php
https://blog.csdn.net/chunxiaqiudong5/article/details/48006841/