За последние 24 часа нас посетили 18006 программистов и 1653 робота. Сейчас ищет 1481 программист ...

Контрольная сумма простым сложением

Тема в разделе "Решения, алгоритмы", создана пользователем iliavlad, 14 авг 2012.

  1. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    Оцените, пойдёт так.
    На входе бинарная строка в 15 символов, надо подсчитать её контрольную сумму (простое сложение).
    Код (Text):
    1. <?php
    2.      function getCRC($str)
    3.     {
    4.         $ar  = str_split($str);
    5.         $ord = array_map('ord', $ar);
    6.         $sum = array_sum($ord); // простое суммирование данных
    7.         $crc = $sum & 0xFF; // может получится больше 255 (1 байта), отсекаем лишнее
    8.  
    9.         return chr($crc);
    10.     }
     
  2. freeneutron

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

    С нами с:
    11 июн 2009
    Сообщения:
    226
    Симпатии:
    3
    Проще и надежнее наверно так:
    return chr(crc32($str)&0xFF)
     
  3. Tokha

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

    С нами с:
    29 янв 2013
    Сообщения:
    77
    Симпатии:
    0
    Проще, может и да, но вот надежнее - нет.

    Контрольная сумма должна обеспечить проверку целостности данных и их как можно более однозначной интерпретации.
    Т.о. обрезать КС до одного байта, при их количестве больше 1, по крайней мере, неэффективно.

    Для CRC32 сейчас навскидку не скажу, а для варианта ТС, попробуйте сравнить контрольные суммы двухбайтовых последовательностей:
    CD и 64
    58 и D9
    B2 и 7F, вычисленные вашим алгоритмом.
    Как понять какую из них описывает ваша контрольная сумма? Как контролировать?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    никак.
    но может быть достаточно. мы же не знаем, что он пытается законтролить. может этого решения будет достаточно.
     
  5. freeneutron

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

    С нами с:
    11 июн 2009
    Сообщения:
    226
    Симпатии:
    3
    Я думаю, что это не готовый алгоритм, а только идея автора. Потому я и писал, что проще воспользоваться готовой хэш-функцией, которая дает аналогичный результат и тратит меньше ресурсов. Кроме того, алгоритм автора абсолютно не надежен в плане криптостойкости, в отличии от стандартных хэш-функций.
     
  6. Tokha

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

    С нами с:
    29 янв 2013
    Сообщения:
    77
    Симпатии:
    0
    Я ни в коей мере не утверждаю, что CRC32 - отстой, а алгоритм, предложенный ТС - фигня.
    Каждая идея имеет право на жизнь и на реализацию. Только применимость того или иного подхода для той или иной задачи очень разная. Я просто попытался показать ТС, что контрольная сумма ради контрольной суммы не даст никаких преимуществ. В ней должен быть смысл. Судя по задаче описанной в первом посте, ТС обменивается какими-то данными, более критичными, чем строка "Hello world", в которой можно допустить strlen()/2 ошибок и получатель поймет, что это. В случае с "бинарной" строкой, похоже, надо проверить не изменилась ли она в процессе передачи волею судеб или злоумышленника.
    Хотя это все досужие домыслы. Может ТС внесет, все же, ясность зачем ему нужна контрольная сумма? Тогда можно будет плясать "от задачи".
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    о, оказывается я не один начинаю с вопроса "анахуа?" а то малышня вечно обижается на такие вопросы, мол начерта вам знать зачем, лучше подскажите как сделать :D
    ох уж эта малышня
     
  8. freeneutron

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

    С нами с:
    11 июн 2009
    Сообщения:
    226
    Симпатии:
    3
    igordata. Раз уж ты заговорил о себе, то справедливо будет заметить, что в большинстве твоих постов ты даже не стремишься высказаться по существу вопроса, а пытаешься так или иначе апкакать тех, кто этот вопрос обсуждает. И так в среднем по 12 постов в день. Откуда такая преданность делу...
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хе. ну разуй глаза и читай внимательнее тогда то, что я пишу =)
     
  10. freeneutron

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

    С нами с:
    11 июн 2009
    Сообщения:
    226
    Симпатии:
    3
    А я-то тут при чем? Это твоя проблема
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну вот об этом я и говорил...