AS2代码到PHP代码

问题描述 投票:0回答:1

我试图将这些功能从AS2转换为PHP,但是我没有运气。

这是原始的AS2函数:

enc.charsToLongs = function (chars)
{
    var _loc3 = chars;
    var tlength = Math.ceil(_loc3.length / 4);
    var temp = [];
    var _loc2 = 0;
    for (var _loc1 = 0; _loc1 < tlength; ++_loc1)
    {
        _loc2 = _loc1 * 4;
        temp[_loc1] = (_loc3[_loc2] << 24) + (_loc3[_loc2 + 1] << 16) + (_loc3[_loc2 + 2] << 8) + _loc3[_loc2 + 3];
    } 
    return (temp);
};

这是我在PHP中拥有的:

function charsToLongs($chars)
{

    $_loc3   = $chars;
    $tlength = ceil(count($_loc3) / 4);
    $temp    = array();
    $_loc2   = 0;
    for ($_loc1 = 0; $_loc1 < $tlength; $_loc1++) {
        $_loc2        = $_loc1 * 4;
        $temp[$_loc1] = ($_loc3[$_loc2] << 24) + ($_loc3[$_loc2 + 1] << 16) + ($_loc3[$_loc2 + 2] << 8) + $_loc3[$_loc2 + 3];
    }
    return ($temp);
}

[每当我运行这些函数时,两者都会得到不同的答案。我知道AS2可以很好地工作,因为我已经多次使用它来加密/解密字符串。还有更多功能,但这似乎是我唯一坚持的功能。有人可以告诉我怎么了吗?

也:chars($ chars / chars)是我要加密的字符串的字符ASCII值的数组。

谢谢。

php flash encryption actionscript-2
1个回答
0
投票

您需要使用ord()chr()(或pack() if you want to be cache-timing safe)将字符串转换为int,以便使用移位操作。

// Wrong:
var_dump(
    ($_loc3[$_loc2] << 24) + ($_loc3[$_loc2 + 1] << 16) + ($_loc3[$_loc2 + 2] << 8) + $_loc3[$_loc2 + 3]
);

// Right:
var_dump(
    (ord($_loc3[$_loc2]) << 24) + (ord($_loc3[$_loc2 + 1]) << 16) + (ord($_loc3[$_loc2 + 2]) << 8) + ord($_loc3[$_loc2 + 3])
);

See the output here

© www.soinside.com 2019 - 2024. All rights reserved.