[英]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.