Вопрос следующего характера: У меня есть двоичный код, записанный в переменную $m и рандомная гамма, записанная в перемунную $gamma. Как сделать сложение по модулю 2 Язык php.
Хорошо, если алгоритма будет не достаточно могу скинуть ещё код. 1.записать слово 2.сгенерировать гамму 3.перевести гамму в бин 4.начать цикл 5.взять символ-асции-бин 6.сложить с гаммой 7.вывести результат 8.конец цикла http://www.pictureshack.ru/images/6030what.jpg PHP: <HTML> <HEAD> <TITLE>Gamma</TITLE></HEAD> <BODY> <center><H1>Gamma</H1></center><br> <FORM NAME="f1" METHOD="POST" align = "center"> Input word: <br> <INPUT TYPE="text" NAME="pwd"><br> <INPUT TYPE="submit" value="CRYPT"><br> </FORM> <?PHP if (isset($_POST['pwd'])){ $prewords=$_POST['pwd']; $count=strlen($prewords); $gamma=rand(); $gamma=decbin($gamma); for ($i=0;$i<$count;$i++) { $password[$i]=ord($prewords[$i]); $password[$i]=decbin($password[$i]); $result[$i]=($password[$i] xor $gamma);/*сложение по модулю 2 надо делать тут!!! как? я не знаю)*/ $result[$i]=bindec($password[$i]); $result[$i]=chr($result[$i]); $res[$i] = $result[$i]^$gamma; /*Я что то натворил и он выводит какую то шифровку, но не понимаю, согласно чему это происходит :)*/ }; echo "Символы: "; foreach($result as $a){ $a.=" "; echo "".$a.""; }; echo "<br>Bin ASCII: "; foreach($password as $m){ $m.=" "; echo "".$m.""; }; $gamma.=" "; echo "<br>Рандомная гамма: ".$gamma."<br>"; echo "<br>Хуета: "; //извините за мат((( Тут надо выводить код новоги символа, образующийся из гаммы+bin(ascii)!!! foreach($res as $i){ $i.=" "; echo "".$i.""; }; }; ?>
http://www.rinatous.com/blog/node/1.html http://www.php.ru/manual/language.operators.html надеюсь поможет.
Эхх, да познавательно. А применительно к коду как? И что у меня в результат вывелось, скажите кто-нибудь?
Если честно - мне не очень понятна фраза rand() возвращает тип int - то есть целое число. На 32-битных системах это 4 байта, на 64-битных - возможно 8 байт, хотя применительно PHP - это, на сколько знаю, всё равно будет 4 байта. Код ASCII символа - 1 байт. Что ты понимаешь под "сложить их"? Речь идёт о побитном "или"? Тогда используй оператор | (не двойное || , а одинарный |). Сложатся побитово. Вот такой пример: PHP: <?php $c = 'a'; $x = ord($c); $x = sprintf('%b', $x); $x = myfunc($x); $l = rand(); $l2 = myfunc(sprintf('%b', $l)); $res = myfunc(sprintf('%b', (ord($c) | $l))); echo($x . '<br />' . $l2 . '<br />' . $res); function myfunc($str = '') { $l = strlen($str); $j = 32; $str2 = ''; while(--$j >= $l) $str2 .= '0'; $str2 .= $str; return($str2); } ?> просто скопируй и нажимай обновить, наблюдая за результатом
Если честно, я объясняю так, как мне объяснял препод по информационной безопасности. "Сложить гамму и двоичный код ASCII", это значит сложить их по модулю 2,как сказал мне он. Вот я и попросил помочь именно с этим шагом. Ибо перевести в 2 код символ я смог, гамму вывел, надо их сложить по модулю 2, и вывести НОВЫЙ символ согласно получившемуся коду. Как то так.
если тебе самому вопрос до конца непонятен, то мне, к примеру, он вообще кажется белибердой. исходя из http://ru.wikipedia.org/wiki/Сложение_по_модулю_2 предположу, что тебе нужна операция ^ ("исключающее или" http://www.php.ru/manual/language.opera ... twise.html). однако не могу понять каким образом складывать 8-битовое ASCII представление и 32-битовое число гаммы - зайдествовать только последний байт?
Вот вот! Всё верно мыслите! Нужно сложить КАК ТО гамму и код ASCII и вывести код нового символа или же сам символ, полученный в следствии операции. Вы ведь знаете способы лучше, не обязательно код должен быть такой, какой я прислал. Да, это операция ^. Просто как сложить, если они и впрямь разные? МОжно опираться на мой код.
yfnf3 ну вот и делай мы подскажем где искать, что гуглить и где ошибки, но ты должен ясно представлять себе алгоритм. ну, и не забывай о том, что спрашивать нужно то, в чём действительно затрудняешься разобраться, а не то, что можно нагуглить за 5-10 минут