簡體   English   中英

為什么異或結果不一樣,0變成1

[英]Why xor results are different, 0 becomes 1

我想制作一個如下圖所示的程序圖1 在此處輸入圖像描述

這是我的代碼

<?php

 $iv = 0;
 $Kunci = "U";

 $key =  dechex(ord($Kunci));
 $k =  sprintf("%08d",decbin(hexdec($key)));

 $c0 = sprintf("%08d", decbin($iv));
 $Cip= "0C52CCD7EDB3";
 $Cbs = array();
 $Cbs[0]= $c0;

 $Plaintext = array();
 $Cas = array();
 $P = array();  
 $m= 1;
 $n=1;

//$Cbs= 
$Csplit = str_split($Cip, 2);
$Cas= str_split($Cip,2);

        for ($i=0; $i<count($Csplit); $i++) { 

            $Cbs[$m] = sprintf("%08d",decbin(hexdec($Csplit[$i])));
            $m++;

        }



        for($i=0; $i < count($Cas); $i++){
            $Cas[$i] = sprintf("%08d",decbin(hexdec($Cas[$i])));
            $Cas[$i]=bindec($Cas[$i])>>1;
            if($Cas[$i] % 2 <> 0)$Cas[$i]+=128;
            $Cas[$i]=sprintf("%08d", decbin($Cas[$i]));

        }


 foreach($Cas as $cas_item) {
$prev_c = $Cbs[$n-1];    

$P[$n] = _xor($cas_item, $k);

 $P[$n] = _xor($P[$n], $prev_c);


$Plaintext[$n] = chr(bindec($P[$n]));

 $n++; 
 }

function _xor($text,$key){
for($i=0; $i<strlen($text); $i++){
  $text[$i] = intval($text[$i])^intval($key[$i]);

}
  return $text;
}

print_r($Csplit);
echo "<br/>";
print_r($Cbs);
echo "<br/>";
print_r($Cas);
echo "<br/>";
print_r($P);
echo "<br/>";
print_r($Plaintext);

?>

Cbs = before shift biner Cas = after shift biner 這出來了,程序代碼可以工作,但是數組 2 和數組 5 是錯誤的。 前面的二進制位碼應該是0,而不是1。 Output: 在此處輸入圖像描述

數組2應該是01110000而不是11110000,數組5應該是01110100但結果是11110100。為什么前面的0是1?

右移時,請注意有符號和無符號移位的區別。 (也稱為算術或邏輯移位)

8 位值 11101000 按符號右移將是 11110100。

關鍵是,如果您將有符號值向右移動,則最高位將復制到移動的新位中。如果您正在移動無符號值,則最高位將移入零。

缺少無符號 integer 數據類型的語言有另一個右移運算符>>>表示無符號(或“邏輯”)移位。 在 PHP 和 Java 中就是這種情況。

這僅適用於右移。 永遠不要離開。 關鍵是右移將導致除以二的行為。

暫無
暫無

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

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