JS代码转php,php的字节操作,类似js这样的字节操作php要怎样实现呢?

maxiaobao999 2017-04-29 10:21:39
JS代码转php,php的字节操作,类似js这样的字节操作php要怎样实现呢?最近有个工程本来是在前端做这样的操作的,但现在要转到后端,php无法直接做无符号右移,大家有可行的办法吗?谢谢了!

var orderBuf = new ArrayBuffer(8);
var orderU8 = new Uint8Array(orderBuf);
var orderU32 = new Uint32Array(orderBuf);

function encrypt(array) {
var qq_key = [0x85116032, 0x52142588, 0x36457321, 0x95273217];
var a = qq_key[0];
var b = qq_key[1];
var c = qq_key[2];
var d = qq_key[3];
var sum = 0;
var y, z;
var delta = 0x9e3779b9;

for (var j = 0; j < array.length - 1; j = j + 2) {
y = array[j];
z = array[j + 1];
sum = 0;
for (var i = 0; i < 32; i++) {
sum += delta;
y += ((z << 4) + a) ^ (z + sum) ^ ((z >>> 5) + b);
z += ((y << 4) + c) ^ (y + sum) ^ ((y >>> 5) + d);
}
array[j] = y;
array[j + 1] = z;
}
}

orderU8[0] = 0x22;
orderU8[1] = 0x22;
orderU8[2] = 0x22;
orderU8[3] = 0x22;
orderU8[4] = 0x22;
orderU8[5] = 0x22;
orderU8[6] = 0x22;
orderU8[7] = 0x22;

encrypt(orderU32);

console.log(orderU8.buffer);
...全文
170 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-04-30
  • 打赏
  • 举报
回复
>>> 在 js 是 无符号右移 php 没有对应的运算符,只能写个函数
/**
 * 无符号32位右移
   unsigned right shift
 * @param mixed $x 要进行操作的数字,如果是字符串,必须是十进制形式
 * @param string $bits 右移位数
 * @return mixed 结果,如果超出整型范围将返回浮点数
 */
function shr32($x, $bits){
    // 位移量超出范围的两种情况
    if($bits <= 0) return $x;
    if($bits >= 32) return 0;
    
    //转换成代表二进制数字的字符串
    $bin = substr(str_repeat('0', 32) . decbin($x), -32);
    return bindec(substr($bin, 0, -$bits));
}
于是有
$a = [0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22];
encrypt($a);
print_r($a);

function encrypt(&$array) {
    $qq_key = [0x85116032, 0x52142588, 0x36457321, 0x95273217];
    $a = $qq_key[0];
    $b = $qq_key[1];
    $c = $qq_key[2];
    $d = $qq_key[3];
    $sum = 0;
    //var y, z;
    $delta = 0x9e3779b9;
 
    for ($j = 0; $j < count($array) - 1; $j = $j + 2) {
        $y = $array[$j];
        $z = $array[$j + 1];
        $sum = 0;
        for ($i = 0; $i < 32; $i++) {
            $sum += $delta;
            $y += (($z << 4) + $a) ^ ($z + $sum) ^ (shr32($z, 5) + $b);
            $z += (($y << 4) + $c) ^ ($y + $sum) ^ (shr32($y, 5) + $d);
        }
        $array[$j] = $y & 0xff;
        $array[$j + 1] = $z & 0xff;
    }
}

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧