Я хочу создать программу, подобную следующей:
, и это мой код
<?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 = до сменного бина Cas = после сменного бина, и это выходит, программный код работает, но массив 2 и массив 5 неверны. двоичный двоичный код впереди должен быть 0, а не 1. Вывод:
массив 2 должен быть 01110000 вместо 11110000, а массив 5 должен быть 01110100, но результат равен 11110100. почему 0 перед 1?