用PHP实现Java中byte类型

  • 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/

Author: thinkwei

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注