java mac校验_一个Java的mac校验域算法,哪位大神能帮忙改写成php版本

public static function getMac($dt, $mlen) {

int $n, $k, $len, $ilen;

// original input String length

$len = array_length($dt);

// 原始串和mac长度的余数

$k = $len % $mlen;

//

$n = $mlen - $k;

$ilen = $len + $n;

$bt = [];

for (int $i = 0; $i < $len; $i++) {

$dt[$i] = $dt[$i] > 0x00 ? $dt[$i] : $dt[$i] + 256;

$bt[$i] = $dt[$i];

}

$bt[$len] = 127;

$bo = [];

for ($i = 0; $i < $ilen;) {

for ($j = 0; $j < $mlen; $j++) {

$bo[$j] ^= $bt[$i];

$i++;

}

}

for ($i = 0; $i < $mlen; $i++) {

// 如果遇到\r \n

if (($bo[$i] >= 0x00 ? $bo[$i] : $bo[$i] + 256) >= 0x80) { // "\r"

$bo[$i] ^= 0x80;

}

if ($bo[$i] == 0x0d) { // "\r"

$bo[$i] = 0x4d;

}

if ($bo[$i] == 0x0a) { // "\n"

$bo[$i] = 0x4a;

}

if ($bo[$i] == 0x3a) { // ":"

$bo[$i] = 0x7a;

}

if ($bo[$i] == 0x7c) { // "|"

$bo[$i] = 0x3c;

}

if ($bo[$i] == 0x00) { // "0"

$bo[$i] = 0x40;

}

}

return $bo;

}

以上是直接翻译,以下是写得更好得:

public static function getMac($dt, $mlen) {

int $n, $k, $len, $ilen;

// original input String length

$len = array_length($dt);

// 原始串和mac长度的余数

$k = $len % $mlen;

//

$n = $mlen - $k;

$ilen = $len + $n;

$bt = [];

$bt[$len] = 127;

foreach($dt as $key => &$value) {

$value = $value > 0x00 ? $value : $value + 256;

$bt[$i] = $value;

}

unset($value);

$bo = [];

foreach($bt as $value) {

for($j = 0; $j < $mlen; $j++) {

$bo[$j] ^= $value;

}

}

unset($value);

foreach($bo as &$value) {

// 如果遇到\r \n

if (($value >= 0x00 ? $value : $value + 256) >= 0x80) { // "\r"

$value ^= 0x80;

}

switch($value) {

case 0x0d:// "\r"

$value = 0x4d;

break;

case 0x0a:// "\n"

$value = 0x4a;

break;

case 0x3a:// ":"

$value = 0x7a;

break;

case 0x7c:// "|"

$value = 0x3c;

break;

case 0x00:// "0"

$value = 0x40;

break;

}

}

return $bo;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值