AS2代码到PHP代码

时间:2014-03-26 00:23:05

标签: php flash encryption actionscript-2

我试过将这些函数从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值数组。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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