За последние 24 часа нас посетили 19228 программистов и 1630 роботов. Сейчас ищут 922 программиста ...

ПОМОГИТЕ со сложением по модулю 2

Тема в разделе "PHP для новичков", создана пользователем yfnf3, 27 ноя 2011.

  1. yfnf3

    yfnf3 Активный пользователь

    С нами с:
    14 дек 2010
    Сообщения:
    36
    Симпатии:
    0
    Вопрос следующего характера:
    У меня есть двоичный код, записанный в переменную $m и рандомная гамма, записанная в перемунную $gamma. Как сделать сложение по модулю 2 Язык php.
     
  2. Koka

    Koka Активный пользователь

    С нами с:
    27 ноя 2011
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    localhost
    2yfnf3,
    можешь более широко раскрыть вопрос?
    есть ли готовый алгоритм? или часть алгоритма?
     
  3. p0st

    p0st Активный пользователь

    С нами с:
    6 окт 2011
    Сообщения:
    3
    Симпатии:
    0
    либо я конкретный новичек либо это просто операция исключающее или ^
     
  4. yfnf3

    yfnf3 Активный пользователь

    С нами с:
    14 дек 2010
    Сообщения:
    36
    Симпатии:
    0
    Хорошо, если алгоритма будет не достаточно могу скинуть ещё код.

    1.записать слово
    2.сгенерировать гамму
    3.перевести гамму в бин
    4.начать цикл
    5.взять символ-асции-бин
    6.сложить с гаммой
    7.вывести результат
    8.конец цикла


    http://www.pictureshack.ru/images/6030what.jpg

    PHP:
    1. <HTML>
    2. <HEAD>
    3. <TITLE>Gamma</TITLE></HEAD>
    4. <BODY>
    5. <center><H1>Gamma</H1></center><br>
    6. <FORM NAME="f1" METHOD="POST" align = "center">
    7. Input word: <br>
    8. <INPUT TYPE="text" NAME="pwd"><br>
    9. <INPUT TYPE="submit" value="CRYPT"><br>
    10. </FORM>
    11. <?PHP
    12. if (isset($_POST['pwd'])){
    13. $prewords=$_POST['pwd'];
    14. $count=strlen($prewords);
    15. $gamma=rand();
    16. $gamma=decbin($gamma);
    17.  
    18. for ($i=0;$i<$count;$i++)
    19. {
    20. $password[$i]=ord($prewords[$i]);
    21. $password[$i]=decbin($password[$i]);
    22. $result[$i]=($password[$i] xor $gamma);/*сложение по модулю 2 надо делать тут!!! как? я не знаю)*/
    23. $result[$i]=bindec($password[$i]);
    24. $result[$i]=chr($result[$i]);
    25.  
    26. $res[$i] = $result[$i]^$gamma; /*Я что то натворил и он выводит какую то шифровку, но не понимаю, согласно чему это происходит :)*/
    27. };
    28.  
    29. echo "Символы: ";
    30. foreach($result as $a){
    31. $a.=" ";
    32. echo "".$a."";
    33.  
    34. };
    35.  
    36. echo "<br>Bin ASCII: ";
    37. foreach($password as $m){
    38. $m.=" ";
    39. echo "".$m."";
    40. };
    41.  
    42. $gamma.=" ";
    43. echo "<br>Рандомная гамма: ".$gamma."<br>";
    44.  
    45.  
    46. echo "<br>Хуета: "; //извините за мат((( Тут надо выводить код новоги символа, образующийся из гаммы+bin(ascii)!!!
    47. foreach($res as $i){
    48. $i.=" ";
    49. echo "".$i."";
    50. };
    51. };
    52. ?>
     
  5. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
  6. yfnf3

    yfnf3 Активный пользователь

    С нами с:
    14 дек 2010
    Сообщения:
    36
    Симпатии:
    0
    Эхх, да познавательно. А применительно к коду как?
    И что у меня в результат вывелось, скажите кто-нибудь?
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Если честно - мне не очень понятна фраза
    rand() возвращает тип int - то есть целое число. На 32-битных системах это 4 байта, на 64-битных - возможно 8 байт, хотя применительно PHP - это, на сколько знаю, всё равно будет 4 байта.
    Код ASCII символа - 1 байт.
    Что ты понимаешь под "сложить их"? Речь идёт о побитном "или"?
    Тогда используй оператор | (не двойное || , а одинарный |). Сложатся побитово.
    Вот такой пример:
    PHP:
    1. <?php
    2. $c = 'a';
    3. $x = ord($c);
    4. $x = sprintf('%b', $x);
    5. $x = myfunc($x);
    6. $l = rand();
    7. $l2 = myfunc(sprintf('%b', $l));
    8. $res = myfunc(sprintf('%b', (ord($c) | $l)));
    9. echo($x . '<br />' . $l2 . '<br />' . $res);
    10. function myfunc($str = '') {
    11.     $l = strlen($str);
    12.     $j = 32;
    13.     $str2 = '';
    14.     while(--$j >= $l)
    15.         $str2 .= '0';
    16.     $str2 .= $str;
    17.     return($str2);
    18. }
    19. ?>
    просто скопируй и нажимай обновить, наблюдая за результатом
     
  8. yfnf3

    yfnf3 Активный пользователь

    С нами с:
    14 дек 2010
    Сообщения:
    36
    Симпатии:
    0
    Если честно, я объясняю так, как мне объяснял препод по информационной безопасности. "Сложить гамму и двоичный код ASCII", это значит сложить их по модулю 2,как сказал мне он. Вот я и попросил помочь именно с этим шагом. Ибо перевести в 2 код символ я смог, гамму вывел, надо их сложить по модулю 2, и вывести НОВЫЙ символ согласно получившемуся коду. Как то так.
     
  9. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    если тебе самому вопрос до конца непонятен, то мне, к примеру, он вообще кажется белибердой.

    исходя из http://ru.wikipedia.org/wiki/Сложение_по_модулю_2 предположу, что тебе нужна операция ^ ("исключающее или" http://www.php.ru/manual/language.opera ... twise.html). однако не могу понять каким образом складывать 8-битовое ASCII представление и 32-битовое число гаммы - зайдествовать только последний байт?
     
  10. yfnf3

    yfnf3 Активный пользователь

    С нами с:
    14 дек 2010
    Сообщения:
    36
    Симпатии:
    0
    Вот вот! Всё верно мыслите! Нужно сложить КАК ТО гамму и код ASCII и вывести код нового символа или же сам символ, полученный в следствии операции. Вы ведь знаете способы лучше, не обязательно код должен быть такой, какой я прислал. Да, это операция ^. Просто как сложить, если они и впрямь разные? МОжно опираться на мой код.
     
  11. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    yfnf3
    ну вот и делай :)
    мы подскажем где искать, что гуглить и где ошибки, но ты должен ясно представлять себе алгоритм.
    ну, и не забывай о том, что спрашивать нужно то, в чём действительно затрудняешься разобраться,
    а не то, что можно нагуглить за 5-10 минут