将C#转换为php?

时间:2011-07-18 07:15:37

标签: c# php

我正在尝试将此函数从C#转换为php,但是当php仅处理整数时,如何处理需要将字符串类型转换为字节数据类型(最多0xFF)?

public static byte[] CreateKeyBlock()
{
    byte[] ac = new byte[6];
    for (int j = 0; j < 6; j++)
    {
        ac[j] = (byte)Rand.Next(0, 255);
        int i;
        byte d;

        ac[3] = (byte)(ac[1] ^ ac[2] ^ ac[4]);
        ac[0] = (byte)((ac[4] ^ ac[1]) + ac[2]);
        ac[5] = 0;
        d = (byte)0xd5;

        for (i = 0; i < 102; i++)
        {
            if (i % 5 != 0)
            {
                ac[(i % 6)] = (byte)(ac[(i % 6)] + d);
                d = ac[(i % 6)];
            }
            else
            {
                ac[(i % 6)] = (byte)(ac[(i % 6)] ^ d);
                d = ac[(i % 6)];
            }
        }
    }

    return ac;
}

3 个答案:

答案 0 :(得分:1)

你不需要施放任何东西。只需确保任何可能导致值超过255的操作都将其结果钳制到字节范围,例如使用$value & 0xff代替$value

同样值得考虑以什么形式返回结果 - PHP不是C#,所以字符串在这里可能更有意义。

答案 1 :(得分:1)

function CreateKeyBlock()
{
    $ac = '';

    for ($j = 0; $j < 6; $j++)
    {
        $ac{$j} = rand(0, 255);

        $ac{3} = ($ac{1} ^ $ac{2} ^ $ac{4}) & 0xff;
        $ac{0} = (($ac{4} ^ $ac{1}) + $ac{2}) & 0xff;
        $ac{5} = 0;

        $d = 0xd5;

        for ($i = 0; $i < 102; $i++)
        {
            if ($i % 5 != 0)
            {
                $ac{($i % 6)} = ($ac{($i % 6)} + $d) & 0xff;
                $d = $ac{($i % 6)};
            }
            else
            {
                $ac{($i % 6)} = ($ac{($i % 6)} ^ $d) & 0xff;
                $d = $ac{($i % 6)};
            }
        }
    }
    return $ac;
}

答案 2 :(得分:0)

试试这段代码:

function CheckByte( $value ) {
    return $value & 0xff;
}

function CreateKeyBlock() {
    $ac = array(0, 0, 0, 0, 0, 0);

    for ( $j = 0; $j < 6; $j++ ) {
        $ac[$j] = rand( 0, 255 );

        $ac[3] = CheckByte( $ac[1] ^ $ac[2] ^ $ac[4] );
        $ac[0] = CheckByte( ( $ac[4] ^ $ac[1] ) + $ac[2] );
        $ac[5] = 0;
        $d = hexdec( "0xd5" );

        for ( $i = 0; $i < 102; $i++ ) {
            $ac[$i % 6] = CheckByte( $i % 5 != 0 ? $ac[$i % 6] + $d : $ac[$i % 6] ^ $d );
            $d = $ac[$i % 6];
        }
    }
    return $ac;
}