簡體   English   中英

將 C# 轉換為 php?

[英]Convert C# to php?

I'm trying to convert this function from C# to php, but how do I deal with needing to type cast to a byte data type (up to 0xFF) when php only deals with integers?

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;
}

你不需要投射任何東西。 只需確保任何可能導致值超過 255 的操作都將其結果限制在字節范圍內,例如使用$value & 0xff而不僅僅是$value

還值得考慮以何種形式返回結果——PHP 不是 C#,所以在這里字符串可能更有意義。

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;
}

試試這個代碼:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM